Alan wrote:
Hi there,
Module commands is gone in python3, so I am trying subprocess. So please I
would appreciate if someone can tell me how to do this better:
before I had:
cmd = 'uname -a'
out = commands.getoutput(cmd)
'Darwin amadeus.local 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23
18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386 i386 MacBookPro5,2
Darwin'
now:
out = sub.Popen(cmd, shell=True, stderr = sub.STDOUT, stdout =
sub.PIPE).communicate()[0][:-1]
b'Darwin amadeus.local 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23
18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386 i386 MacBookPro5,2
Darwin'
Yes, it's ugly. the [:-1] above is to get read of the last '\n' which with
getoutputs I didn't have. But what's giving headache is this "b'..." in the
beginning.
Can someone explain, point me to where I can now about it and how to make
this better? I wanted a plain string in out.
Many thanks in advance,
Alan
In Python3, 'plain string' would be unicode. But communicate returns
bytes. So convert them to a string, for example, by using str(). By
default that'll assume the bytes are ASCII encoded, so if you have any
characters above 7f, you'd need something more.
DaveA
--
http://mail.python.org/mailman/listinfo/python-list