您正在阻止对两个文件的读取。第一个需要在第二个开始之前完成。如果应用程序向写入了很多内容
stderr,而对却没有写入任何内容
stdout,那么您的进程将坐在那里等待
stdout不来的数据,而您正在运行的程序坐在那里等待被写入的内容
stderr被读取(从不因为-
您正在等待
stdout)。
有几种方法可以解决此问题。
最简单的是不拦截
stderr;
离开
stderr=None。错误将直接输出到
stderr。您无法拦截它们并将其显示为您自己的消息的一部分。对于命令行工具,这通常是可以的。对于其他应用程序,这可能是个问题。
另一种简单的方法是重定向
stderr到
stdout,因此您只有一个传入文件:set
stderr=STDOUT。这意味着您无法将常规输出与错误输出区分开。根据应用程序如何写入输出,这可能会接受也可能无法接受。
处理此问题的完整且复杂的方法是
select(http://docs.python.org/library/select.html)。这使您能够以非阻塞方式进行读取:只要数据出现在
stdout或上,就可以获取数据
stderr。如果确实需要,我只会建议这样做。这可能在Windows中不起作用。



