如何使用命令获取输出子流程.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
相同的顺序,我该怎么做呢?在
使用
communicate
这是不可能的。如果对不同的文件执行
write
s,则没有定义顺序。在如果
write
s到stdout,stderr转到同一个地方(就像您的stdout=PIPE, stderr=STDOUT
案例中一样),您可以获得正确的顺序。在如果“近似”顺序就足够了,这里是simple code example with threads,这里是{a2}。在
所以我想我已经有了自己的一些线索。在
对于下面的示例,
test.py
是这样的:我获得正确输出的代码是:
^{pr2}$我完全可以想象一个stderr行与stdout行混淆的情况,但是出于我想要它的目的,它肯定是有效的。(我把它作为日志模块的一部分,该模块将运行一个命令,并对stdout和stderr使用不同的日志级别。)
相关问题 更多 >
编程相关推荐