2014-10-28 109 views
0

我想在文件中捕獲由外部程序包產生的子進程的標準輸出。爲外部程序包產生的Python子進程捕獲標準輸出

我不能簡單地將sys.stdout重定向到一個文件,因爲它不捕獲新進程的輸出(How can I capture the stdout output of a child process?)。

但不幸的是,我也不能簡單地使用子進程或終端來捕獲stdout,因爲我沒有產生這個進程 - 它是由外部Python包中的代碼產生的。

具體來說,我使用API​​ pystan。此包中的一些函數產生子MCMC運行,寫入標準輸出。

回答

0

我只看到兩種方法可以做到這一點:

  • 猴子補丁pystan(可能需要幾個補丁)
  • 猴子補丁subprocess(可能會比您想了解更多信息)

我會用subprocess猴子補丁:寫你自己的版本Popen(或任何pystan正在使用,並用您自己的版本替換subprocess版本。您的版本將跟蹤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 
相關問題