使用Python中的子进程从进程中无缓冲读取

Abh*_*bhi 21 python subprocess

我试图从一个产生长而耗时的输出的过程中读取.不过,我想抓住它的输出为当它被生产.但是使用类似下面的东西似乎是在缓冲命令的输出,所以我最终得到了所有输出行:

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
    for line in p.stdout:
        print line
Run Code Online (Sandbox Code Playgroud)

我在MacOS 10.5上尝试这个

bre*_*dan 29

文件迭代器自己进行一些内部缓冲.试试这个:

line = p.stdout.readline()
while line:
    print line
    line = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 6

通常情况下,每个程序都会在输入和/或输出通道上进行比你想要的更多的缓冲...除非它被愚弄相信所说的频道实际上是一个终端!

为了"愚弄一个好的事业"的目的,使用pexpect - 它在Mac上运行得很好(在Windows上生活更难,尽管有一些解决方案甚至可能有帮助 - 幸运的是我们不需要在那些你使用Mac代替).