2011-05-19 72 views
7

我正在使用子流程模块从python运行二进制文件。python子流程输出到标准输出

拍摄由二进制产生的输出,我使用:

proc = subprocess.Popen (command_args, shell=False, stdout=subprocess.PIPE) 
out = proc.communicate()[0] 
#print the output of the child process to stdout 
print (out) 

这样做是印刷过程中的输出后,已完成执行。无论如何,我可以打印此输出到标准输出程序正在执行?我真的需要看看输出是什么,因为这些程序可以运行很长时间。

感谢您的帮助。

+0

没关系,大家好,我想我找到了解决办法: '基本上,你有3种选择: 使用线程到另一个线程读取而不会阻塞主线程。 选择stdout,stderr而不是通信。这样,您可以在数据可用时阅读并避免阻塞。 让图书馆解决这个问题,扭曲是一个明显的选择。“#: – therealtypon 2011-05-19 17:19:39

+4

如果你找到另一个答案,像http://stackoverflow.com/questions/4585692/python-nonblocking-subprocess-check-stdout/4585898#4585898,请链接而不是在你自己的问题上重复评论的答案。 – phooji 2011-05-19 17:23:06

+0

对不起。我认为评论中的观点是stackoverflow.com/questions/4585692/... 的蒸馏本质下次我会记住这一点 – therealtypon 2011-05-20 20:51:33

回答

7

根本就没有输出发送到管道:

proc = subprocess.Popen (command_args, shell=False) 
proc.communicate() 
+2

这是行不通的:沟通退货(None,None) – josh 2013-07-24 18:44:09

+2

@josh:是的,这是预期的,以及代码不将结果存储在变量中的原因。由于我们不会将输出发送到管道,子进程将继承当前进程的stdout,这意味着所有内容都将直接打印到终端。 – 2013-07-24 19:28:06

+0

对不起,你没错 - 我没有仔细阅读这个问题,我认为他想做我想做的事情,也就是让实时输出到标准输出,然后捕获输出之后 – josh 2013-07-25 15:19:36