在使用Python从子无缓冲的过程读(Unbuffered read from process us

2019-06-26 20:03发布

我试图从产生长期且耗时的输出过程中阅读。 然而,我要赶它作为输出,并在生产 。 但是,使用像下面这样似乎是缓冲命令的输出,所以我最终得到的输出线全部一次:

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

我在Mac OS 10.5尝试这种

Answer 1:

文件迭代器做了一些内部缓冲自身 。 试试这个:

line = p.stdout.readline()
while line:
    print line
    line = p.stdout.readline()


Answer 2:

通常情况下,除非它误以为所述通道实际上是一个终端的每个程序都会做更多缓冲的输入和/或输出通道比你看上去的愿望...!

对于“嘴硬在一个良好的事业”的宗旨,用Pexpect的 -它只是罚款一台Mac(生命是在Windows上更难,但也有解决方案,可以帮助甚至有上-幸好我们不需要纠缠于那些为您使用的是Mac而不是)。



Answer 3:

这实际上是是固定不变的在Python 2.6的错误: http://bugs.python.org/issue3907



文章来源: Unbuffered read from process using subprocess in Python