【发布时间】:2015-10-07 06:59:53
【问题描述】:
我已经看到了很多在 python 中使用管道的不同方法,但是它们太复杂而无法理解。我想要的是这样写:
import os
for cmdoutput_line in os.system('find /'):
print cmdoutput_line
在不等待+大缓冲命令输出的情况下实现它的最简单方法是什么?我不想等待命令完成,我只想实时迭代输出。
【问题讨论】:
我已经看到了很多在 python 中使用管道的不同方法,但是它们太复杂而无法理解。我想要的是这样写:
import os
for cmdoutput_line in os.system('find /'):
print cmdoutput_line
在不等待+大缓冲命令输出的情况下实现它的最简单方法是什么?我不想等待命令完成,我只想实时迭代输出。
【问题讨论】:
在 while 语句中,您可以使用 subprocess 逐行读取,
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
【讨论】:
process.stdout。
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
【讨论】:
试试这个:
import subprocess
sp = subprocess.Popen('find /', shell=True, stdout=subprocess.PIPE)
results = sp.communicate()
print results
【讨论】: