有很多类似的帖子,但我没有找到答案。
Python
在带有and模块的Gnu/Linux 上subprocess
,我使用以下代码来迭代使用子进程启动的命令的 stdout/sdterr:
class Shell:
"""
run a command and iterate over the stdout/stderr lines
"""
def __init__(self):
pass
def __call__(self,args,cwd='./'):
p = subprocess.Popen(args,
cwd=cwd,
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
)
while True:
line = p.stdout.readline()
self.code = p.poll()
if line == '':
if self.code != None:
break
else:
continue
yield line
#example of use
args = ["./foo"]
shell = Shell()
for line in shell(args):
#do something with line
print line,
这工作正常...除非执行的命令是python
,例如 `args = ['python','foo.py'],在这种情况下,输出不会刷新,而是仅在命令完成时打印。
有解决办法吗?