Monday, April 11, 2011

Convert byte array to Python string

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