如何从python调用脚本并实时打印其输出

如何从python调用脚本并实时打印其输出,python,windows,python-2.7,subprocess,Python,Windows,Python 2.7,Subprocess,我正在使用Python2.7.9为Windows7编写一个程序。此程序允许用户计划和运行脚本列表,并需要实时显示脚本的输出。为了运行脚本,我有以下代码: self.proc = Popen(command, shell=False, stdout=PIPE, stderr=STDOUT) for line in iter(self.proc.stdout.readline, b''): print line 这是工作和运行脚本刚刚好,但问题是,我只看到输出后,脚本已经完成运行,这是不可

我正在使用Python2.7.9为Windows7编写一个程序。此程序允许用户计划和运行脚本列表,并需要实时显示脚本的输出。为了运行脚本,我有以下代码:

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"
我没有看到任何print语句,直到在睡眠时间之后,脚本结束,所有内容都立即打印到控制台。我尝试了几种不同的方法,但都无法实时打印。我发现唯一有效的方法是通过添加sys.stdout.flush()或将以下内容添加到我要运行的每个python脚本的开头,使我正在运行的脚本无缓冲:

unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stdout = unbuffered
我还需要能够运行其他脚本,如perl和java,因此这不是一个好的修复方法


那么,有没有办法从python程序中执行脚本并实时显示输出?我也愿意接受其他建议,也许有比使用我不知道的子流程更好的方法。

复制或复制,或者如果
命令
是python脚本,则使用
-u
参数。或者(更好)你可以。在Windows上,您可以尝试在控制台中运行这些命令。@Dan:链接中唯一有关于缓冲问题答案的问题是。我希望现有的答案都不能在Windows上使用(OP可以尝试,但它已经有一段时间没有更新了)、或的副本或副本,或者如果
命令
是python脚本,则使用
-u
参数。或者(更好)你可以。在Windows上,您可以尝试在控制台中运行这些命令。@Dan:链接中唯一有关于缓冲问题答案的问题是。我希望现有的答案都不能在Windows上使用(OP可以尝试,但它已经有一段时间没有更新了)