On 07/14/2010 08:38 AM, 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
--
Alan Wilter S. da Silva, D.Sc. - CCPN Research Associate
Department of Biochemistry, University of Cambridge.
80 Tennis Court Road, Cambridge CB2 1GA, UK.
>>http://www.bio.cam.ac.uk/~awd28 <http://www.bio.cam.ac.uk/%7Eawd28><<
The 'b' is not part of the returned value. If you look at the *type* of
the returned value, you will find that it is not a string, but rather a
byte array. Printing of byte arrays displays the b'...' to indicate
the type of thing begin printed.
If you want a string, then you must convert the byte array to a
string. For instance:
str_out = out.decode('ascii')
(And remember: in Python3, strings are always unicode.)
Also, using out.strip() or str_out.strip() may be a better way to remove
the white space.
Gary Herron
--
http://mail.python.org/mailman/listinfo/python-list