是否有一种简单的方式来收集子进程的输出而不实际等待呢?在Python中收集子进程输出非阻塞
我可以考虑创建一个subprocess.Popen()
捕获它的标准输出,然后调用p.communicate()
,但这会阻塞,直到子进程终止。
我能想到使用subprocess.check_output()
或类似的,但也会阻止。
我需要一些东西,我可以开始,然后做其他的东西,然后检查子进程是否被终止,如果是,则取其输出。
我能想到的两个较为复杂的方式来实现这一目标:
- 将输出重定向到一个文件,然后终止后我可以读取该文件的输出。
- 实现并启动一个处理线程(!),它不断尝试从子进程的stdout读取数据并将其添加到缓冲区。
第一个需要临时文件和磁盘I/O,我不喜欢在我的情况。第二个意思是实现相当多。
我想可能有一种我现在还没有想到的更简单的方法,或者在某些我还没有找到的库中使用现成的解决方案。
“进程中的一个线程”的方法并不复杂。你需要一个例子吗? –