查看从Python调用的长时间运行的外部进程的输出

查看从Python调用的长时间运行的外部进程的输出,python,popen,Python,Popen,我有一个非常长的运行过程,我想从Python程序调用它。这个过程向标准输出大量信息。我希望在命令行上看到被调用程序运行时的输出。我读过关于波本的书,并且试过 p = Popen(cmd, stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() 和它的变体,但cmd的输出在cmd运行完成之前不会显示 当cmd运行时,我如何查看cmd的输出?我通过使用注释中提到的部分内容,并将其与以下内容结合起来,解决了这个问题 # read line

我有一个非常长的运行过程,我想从Python程序调用它。这个过程向标准输出大量信息。我希望在命令行上看到被调用程序运行时的输出。我读过关于波本的书,并且试过

p = Popen(cmd, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
和它的变体,但cmd的输出在cmd运行完成之前不会显示


当cmd运行时,我如何查看cmd的输出?

我通过使用注释中提到的部分内容,并将其与以下内容结合起来,解决了这个问题

# read line without blocking
while not p.poll():
    try: 
        line = q.get_nowait() # or q.get(timeout=.1)
    except Empty:
        pass # Do nothing
    else: # got line
        print line

我通过使用评论中提到的部分内容,并将其与以下内容结合起来,解决了这个问题

# read line without blocking
while not p.poll():
    try: 
        line = q.get_nowait() # or q.get(timeout=.1)
    except Empty:
        pass # Do nothing
    else: # got line
        print line

这个问题是密切相关的。我想它解决了你的问题:可能是重复的,那么我可以把我自己的帖子转换成评论吗,或者我需要一些荒谬的分数来做这件事吗?;)这几乎是一样的。唯一的区别是,您指向我的线程中的顶级答案将继续生成进程。我确实希望流程在完成之前停止,但我只希望看到过程中的输出。这个问题是密切相关的。我想它解决了你的问题:可能是重复的,那么我可以把我自己的帖子转换成评论吗,或者我需要一些荒谬的分数来做这件事吗?;)这几乎是一样的。唯一的区别是,您指向我的线程中的顶级答案将继续生成进程。我确实希望进程阻塞直到完成,但我只希望看到过程中的输出。