【发布时间】:2010-11-08 06:37:50
【问题描述】:
我想运行一个系统进程,截取输出,并在 Python 脚本中逐行实时修改。
我的最佳尝试是:在打印之前等待该过程完成:
#!/usr/bin/env python
import subprocess
cmd = "waitsome.py"
proc = subprocess.Popen(cmd, shell=True, bufsize=256, stdout=subprocess.PIPE)
for line in proc.stdout:
print ">>> " + line.rstrip()
脚本waitsome.py 只是每半秒打印一行:
#!/usr/bin/env python
import time
from sys import stdout
print "Starting"
for i in range(0,20):
time.sleep(0.5)
print "Hello, iteration", i
stdout.flush()
是否有一个简单的解决方案可以让subprocess 允许实时迭代输出?我必须使用线程吗?
曾几何时,我用 Perl 编写脚本,这简直是小菜一碟:
open(CMD, "waitsome.py |");
while (<CMD>) {
print ">>> $_";
}
close(CMD);
【问题讨论】:
-
对不起,我只看到了第一个,并理解它是 subprocess' 缓冲的问题,而不是父 python 脚本的问题。