2015-10-02 73 views
0

我正在編寫一個枚舉計算機上運行的所有進程的Python腳本。我當前的代碼執行此操作,但將其打印在難以閱讀的大塊文本中。如何改進我的腳本以便爲每個進程和所有進程輸出垂直列表中的文本?將文本塊放入列表

import subprocess 
print(subprocess.check_output('set',shell=True) 

*編輯:下面是來自上面的腳本輸出文本 enter image description here

+0

舉一個例子你的輸出應該是什麼樣子等。我發現輸出已經很可讀了。 – user38034

+0

'subprocess.check_output'返回一個字符串。你可以用它做任何你想做的事情,例如用'split'分割新行,這將創建一個列表。 – user38034

+0

@ user38034將被空白分割。也許你的意思是分裂。 – wim

回答

-1

set應該已經用換行打印,所以如果他們沒有顯示出來,事情是十分錯誤比你告訴我們。你總是可以翻倍了換行,如果你想開拆的設置,例如:

import subprocess 
print(subprocess.check_output('set',shell=True).replace('\n', '\n\n')) 

如果問題是,你在Python 3的運行和bytes對象是大斑點,可以使subprocess其解碼爲友好打印字符串爲您提供:

print(subprocess.check_output('set',shell=True, universal_newlines=True)) 
# Yes, the name of the keyword is dumb; it sounds like it handles different 
# line ending conventions, but on Python 3, it also decodes from `bytes` 
# to `str` for you. 

對於換行的一般情況很好(但它確實沒有爲這只是「大」的文字段落),你可能想看看textwrap module;它將文本塊分割成一個list很好地包裹在單詞邊界處的行,因此您不會將單詞分割成多行。

+0

'.replace('\ n','\ n \ n')'不正確;輸出顯示OP使用Python 3.'universal_newlines = True'使用'locale.getpreferredencoding(False)',可能會返回類似'cp1252'的內容,而'set'可能使用cmd.exe OEM編碼,例如'cp437'。如果你不想使用'os.environ'(可能在Windows上使用Unicode API)出於某種原因,那麼你可以嘗試[強制'set'使用utf-16編碼,以支持非ascii路徑]( http://stackoverflow.com/a/32902728/4279) – jfs

-1

聲明:我沒有做過你以前的工作,但這可能會奏效。

import subprocess 

processes = subprocess.check_output('set',shell=True) 

processes = processes.decode('UTF-8').split('\n') # convert bytes to unicodes and split 

for process in processes: 
    print(process) 
+0

這工作,以及@ ShadowRanger的回答 –

+0

@DylanF:'set'不太可能在這裏使用utf-8;它可能是'cp437',即如果存在非ascii路徑,則期望失敗。你問題中的輸出清楚地表明換行符是'b'\ r \ n'',而不是''\ n'' – jfs

0

set is an internal command在您的情況下顯示cmd.exe環境變量。

要在Python中獲取環境變量,請改爲使用os.environ

如果你想獲得set命令的輸出作爲字符串(未測試)的列表:

#!/usr/bin/env python3 
import os 
from subprocess import check_output 

lines = check_output('cmd.exe /U /c set').decode('utf-16').split(os.linesep)