2015-10-07 59 views
0

我見過很多種方式來使用python管道,但他們太複雜,無法理解。我想寫的東西是這樣的:python迭代在Linux命令輸出,實時線逐行

import os 

for cmdoutput_line in os.system('find /'): 
    print cmdoutput_line 

什麼是最簡單的方式來實現它,而無需等待+大緩衝命令輸出?命令完成後,我不想等待,我只是想實時迭代輸出。

回答

1
from subprocess import Popen, PIPE 

def os_system(command): 
    process = Popen(command, stdout=PIPE, shell=True) 
    while True: 
     line = process.stdout.readline() 
     if not line: 
      break 
     yield line 


if __name__ == "__main__": 
    for path in os_system("find /tmp"): 
     print path 
+0

謝謝,這是最接近和最簡單的使用方法! – Fedcomp

0

試試這個:

import subprocess 

sp = subprocess.Popen('find /', shell=True, stdout=subprocess.PIPE) 
results = sp.communicate() 
print results 
3

語句,您可以逐行讀取與

from subprocess import Popen, PIPE, STDOUT 

process = Popen('find /', stdout = PIPE, stderr = STDOUT, shell = True) 
while True: 
    line = process.stdout.readline() 
    if not line: break 
    print line 
+1

我敢肯定,你可以在'迭代process.stdout'就像任何其他類似文件的對象一樣。 – Blckknght