python3: help with subprocess

Dave Angel davea at ieee.org
Wed Jul 14 12:24:47 EDT 2010


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




More information about the Python-list mailing list