我正在尝试从产生长时间且耗时的输出的过程中读取。但是,我想在它产生时捕捉它的输出。但是使用类似下面的东西似乎正在缓冲命令的输出,所以我最终一次得到了所有的输出行:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print line
我正在 MacOS 10.5 上尝试这个
我正在尝试从产生长时间且耗时的输出的过程中读取。但是,我想在它产生时捕捉它的输出。但是使用类似下面的东西似乎正在缓冲命令的输出,所以我最终一次得到了所有的输出行:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print line
我正在 MacOS 10.5 上尝试这个
文件迭代器自己做一些内部缓冲。试试这个:
line = p.stdout.readline()
while line:
print line
line = p.stdout.readline()
您还需要确保您正在运行的进程实际上经常刷新其输出缓冲区。
通常,每个程序都会在其输入和/或输出通道上进行比您看起来想要的更多的缓冲......除非它被愚弄到相信所说的通道实际上是一个终端!
出于“出于好意”的目的,请使用pexpect - 它在 Mac 上运行良好(在 Windows 上生活更艰难,尽管有一些解决方案可能会有所帮助 - 幸运的是,我们不需要纠缠于那些您使用 Mac 代替)。
这实际上是 Python 2.6 中修复的错误:http: //bugs.python.org/issue3907