2015-10-20 50 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