我试图从一个产生长而耗时的输出的过程中读取。但是,我希望捕获它的输出,并在生成它时。但是使用类似下面的东西似乎是在缓冲命令的输出,所以我最终得到了输出行:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print line
我在MacOS 10.5上尝试这个
答案 0 :(得分:29)
文件迭代器正在进行一些内部缓冲on its own。试试这个:
line = p.stdout.readline()
while line:
print line
line = p.stdout.readline()
答案 1 :(得分:6)
通常情况下,每个节目都会在输入和/或输出频道上进行比你想要的更多的缓冲...除非它被愚弄相信所说的频道实际上是一个终端!
对于那个“为了一个好的事业而愚弄”的目的,使用pexpect - 它在Mac上运行得很好(在Windows上生活更难,尽管有一些解决方案甚至可能有帮助 - 幸运的是我们不会当你使用Mac时,需要纠缠于那些。)
答案 2 :(得分:3)
这实际上是Python 2.6中修复的错误:http://bugs.python.org/issue3907