捕获外部包生成的Python子级的标准输出
我希望在文件中捕获由外部包生成的子进程的标准输出 我不能简单地将sys.stdout重定向到一个文件,因为这不会捕获新进程()的输出 但不幸的是,我也不能简单地使用subprocess或终端来捕获stdout,因为我不是在生成进程——它是由外部Python包中的代码生成的捕获外部包生成的Python子级的标准输出,python,Python,我希望在文件中捕获由外部包生成的子进程的标准输出 我不能简单地将sys.stdout重定向到一个文件,因为这不会捕获新进程()的输出 但不幸的是,我也不能简单地使用subprocess或终端来捕获stdout,因为我不是在生成进程——它是由外部Python包中的代码生成的 具体地说,我正在使用API编写pystan包。此包中的某些函数生成写入标准输出的子MCMC运行。我只看到两种方法: 猴子补丁pystan(可能需要几个补丁) monkey patch子流程(可能会获得比您想要的更多的信息)
具体地说,我正在使用API编写pystan包。此包中的某些函数生成写入标准输出的子MCMC运行。我只看到两种方法:
- 猴子补丁
(可能需要几个补丁)pystan
- monkey patch
(可能会获得比您想要的更多的信息)子流程
子流程
猴子补丁:编写自己版本的Popen
(或任何pystan
正在使用的子流程
版本,并用自己的版本替换子流程。您的版本将跟踪STDOUT
,并将其保存到您可以找到的地方
大概是这样的:
import subprocess
original_Popen = subprocess.Popen
def my_Popen(..., stdout=PIPE, ...): # or somesuch
...
subprocess.Popen = my_Popen
# call pystan here
subprocess.Popen = original_Popen # if needed