Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 捕获产生更多进程的子进程的输出?_Python_Process_Subprocess_Stdout - Fatal编程技术网

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

我希望从Python子流程中启动外部应用程序,如下所示:

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()”来启动的,因此[如果我可以访问源代码,这可能是一个答案。