Python 捕获产生更多进程的子进程的输出?
我希望从Python子流程中启动外部应用程序,如下所示:Python 捕获产生更多进程的子进程的输出?,python,process,subprocess,stdout,Python,Process,Subprocess,Stdout,我希望从Python子流程中启动外部应用程序,如下所示: import subprocess ... process = subprocess.POpen (shlex.split ("make test-scripts"), env=my_environment, stdout=my_logfile, stderr=my_logfile) result = process.wait
import subprocess
...
process = subprocess.POpen (shlex.split ("make test-scripts"),
env=my_environment,
stdout=my_logfile, stderr=my_logfile)
result = process.wait ()
因此make命令将启动另一个要测试的应用程序,我对日志文件中捕获的结果输出感兴趣
除非已启动的应用程序也生成了自己的进程,否则这种方法工作得很好。在本例中,这些新进程的输出不会出现在我的日志文件中,而是出现在DOS shell中,上面的python脚本是从DOS shell开始的
是否也有办法获得这些“子”过程的输出
我已经尝试过的(但没有成功):
- 由我自己的监听器重新定义
和sys.stdout
sys.stderr
- 各种
重定向'2>&1'
- 使用子流程参数的各种实验(stdout通过管道,shell=True,…)
我在这个方向上找到的唯一提示是,但这与Python子流程应用程序(我启动的应用程序是C++)有关。看起来应用程序生成的进程(不一定)不会写入与应用程序本身相同的输出。我不认为你可以在应用程序之外解决这个问题。经过更多的评估,似乎没有一种方法可以从“外部视图”来解决这个问题。我假定进程在C++应用程序的一部分中使用“CreateProcessW()”,因此如果我可以访问源代码,它可能是一个答案。写下与应用程序本身相同的输出。我认为您不能将它修复在应用程序之外。在经过更多的评估之后,似乎没有办法从“外部视图”中这样做。我假定这些过程是在应用程序的C++部分中使用“CreateProcessW()”来启动的,因此[如果我可以访问源代码,这可能是一个答案。