2015-10-20 49 views
0

如何让我的输出subprocess.check_output(args, "command")可以被人类读取?我已经研究了这个主题,并且已经找到了如何“标记”但不是erm ..“de-tokenize”输出。 我下面的示例代码相对我以后,但更好地解释,当我打印string = subprocess.check_output(...)馈送的字符串时,它几乎是无法理解。显示来自子流程的可读输出check_output

代码:

from subprocess import * 
readOutput = check_output(
    "dir", 
    shell = True) 
print(readOutput)` 

输出:

b' Volume in drive C has no label.\r\n Volume Serial Number is 2AAE-9786\r\n\r\n Directory of C:\\Users\\spike\\Documents\\GitHub\\GitterGUI\\example\r\n\r\n10/19/2015 06:29 PM <DIR>   .\r\n10/19/2015 06:29 PM <DIR>   ..\r\n10/19/2015 06:29 PM    60 batfile.bat\r\n10/19/2015 06:26 PM     0 New Bitmap Image.bmp\r\n10/19/2015 06:26 PM    22 New Compressed (zipped) Folder.zip\r\n10/19/2015 06:26 PM <DIR>   New folder\r\n10/19/2015 06:26 PM <DIR>   New folder (2)\r\n10/19/2015 06:26 PM     0 New Text Document (2).txt\r\n10/19/2015 06:26 PM     0 New Text Document (3).txt\r\n10/19/2015 06:26 PM     0 New Text Document.txt\r\n10/19/2015 06:27 PM    96 script.py\r\n    7 File(s)   178 bytes\r\n    4 Dir(s) 819,483,295,744 bytes free\r\n' 

它应该是:

Volume in drive C has no label. 
Volume Serial Number is 2AAE-9786 

Directory of C:\Users\spike\Documents\GitHub\GitterGUI\example 

10/19/2015 06:29 PM <DIR>   . 
10/19/2015 06:29 PM <DIR>   .. 
10/19/2015 06:29 PM    60 batfile.bat 
10/19/2015 06:26 PM     0 New Bitmap Image.bmp 
10/19/2015 06:26 PM    22 New Compressed (zipped) Folder.zip 
10/19/2015 06:26 PM <DIR>   New folder 
10/19/2015 06:26 PM <DIR>   New folder (2) 
10/19/2015 06:26 PM     0 New Text Document (2).txt 
10/19/2015 06:26 PM     0 New Text Document (3).txt 
10/19/2015 06:26 PM     0 New Text Document.txt 
10/19/2015 06:27 PM    96 script.py 
       7 File(s)   178 bytes 
       4 Dir(s) 819,481,882,624 bytes free 

正如你所看到的,我的脚本需要认真的工作。提前致谢。

回答

2

使用print((readOutput).decode('utf-8')) 而不是print(readOutput)

的问题是输出字符串readOutput不是Unicode格式。

编辑:

我喜欢的反应 “另外,通过universal_newlines=Truecheck_output,使其自动解码。”

- ShadowRanger

+0

可替代地,通过'universal_newlines = TRUE'到'check_output'使它自动解码。 – ShadowRanger

+0

太棒了!我怎么能在没有被禁止离开这个地方的情况下将它添加到我的答案中? – spikespaz

+0

咦?如果你喜欢,请继续添加它;可以详细说明。我只是指出了隐式转换为'str'而不是获取'bytes',然后明确转换的方式。 – ShadowRanger