对属于流程输出的每一行执行某些操作

时间:2010-10-30 16:51:24

标签: python subprocess

使用subprocess模块时,如何对流程输出的每一行执行某些操作?我不想等待所有的输出,比如在使用communicate时,而是在产生它时立即对它做一些事情。可以这样做吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,尚未接受将此添加到子流程的建议:http://www.python.org/dev/peps/pep-3145/

以下是使用现有子流程执行此操作的方法:http://code.activestate.com/recipes/440554/

评论者还注意到这个简单的解决方案(有一些缺点):

flags = fcntl.fcntl(subprocess.stdout, fcntl.F_GETFL)
fcntl.fcntl(subprocess.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)