【发布时间】:2016-01-12 16:30:17
【问题描述】:
如何使用 subprocess.Popen 从命令中获取输出,并为 stdout 和 stderr 提供单独的回调,但要确保按照行来自进程的顺序调用这些回调?
如果我不关心分离 STDOUT 和 STDERR,那么我可以这样做:
fd = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
line = fd.stdout.readline()
while line :
callback( line )
line = fd.stdout.readline()
但是,如果我有 stdoutCallback 和 stderrCallback,并希望它们在适当的输出上被调用,但按照与上述代码相同的顺序调用 callback,我将如何执行此操作?
【问题讨论】:
-
我想我可以自己通过产生几个线程来做到这一点,每个线程用于 STDOUT 和 STDERR,它们会将每一行输出插入到共享列表中,并带有一个标识符管道来自。然后主线程可以观察这个列表并调用适当的回调。互斥锁快乐!
标签: python subprocess