我正在使用Python 2.7.9编写Windows 7程序。该程序允许用户安排和运行脚本列表,并需要实时显示脚本的输出。为了运行脚本,我有以下代码:
self.proc = Popen(command, shell=False, stdout=PIPE, stderr=STDOUT)
for line in iter(self.proc.stdout.readline, b''):
print line
这是正常工作并运行脚本很好,但问题是我只在脚本运行完成后才看到输出,这是不可接受的。例如,我有一个简单的程序:
from time import sleep
print "test: Can you see me?"
#sys.stdout.flush()
sleep(10)
print "ending"
直到睡眠时间之后我才看到任何打印语句,此时脚本结束并且所有内容立即打印到控制台。我尝试过几种不同的方法,但没有任何方法可以实时打印。我发现唯一可行的方法是通过添加sys.stdout.flush()或将以下内容添加到我想要运行的每个python脚本的开头来使脚本运行无缓冲:
unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stdout = unbuffered
我还需要能够运行其他脚本,如perl和java,所以这不是一个好的修复。
那么有没有办法从python程序执行脚本并实时显示输出?我也可以接受其他建议,也许有比使用我不了解的子流程更好的方法。