Hi,
I'm using this code to get standard output from an external program:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
The communicate() method returns an array of bytes:
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
However, I'd like to work with the output as a normal Python string. So that I could print it like this:
>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
I thought that's what the binascii.b2a_qp() method is for, but when I tried it, I got the same byte array again:
>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
Anybody knows how to convert the byte array back to string? I mean, using the "batteries" instead of doing it manually.
And I'd like it to be ok with Python 3.
Thanks!
From stackoverflow
-
You need to decode the bytes object to produce a string:
>>> b"abcde" b'abcde' >>> b"abcde".decode("utf-8") 'abcde'
Tomas Sedovic : Love you. Thanks! -
You need to decode the byte string and turn it in to a character (unicode) string.
b'hello'.decode(encoding)
or
str(b'hello', encoding)
0 comments:
Post a Comment