2014-02-14 65 views
1

我已經徹底搜索了一個答案,但還沒有找到任何解決方案。如何從子進程讀取輸出而不打印到終端?

我只需要暫時執行一個子進程來打印它的版本信息。如果從命令行運行,它只是

.\bin\application.exe --version 

並且版本信息被打印到終端。我想用字符串捕獲這些信息。我一直在嘗試變種

args = ("path\to\application.exe", "--version") 
subprocess.Popen(args, stdout=subprocess.PIPE).communicate()[0] 

沒有成功。如果可能的話,我也需要這樣做,不要將輸出打印到終端。我能做什麼?

+4

是應用程序打印版本信息到STDERR?嘗試在你的「Popen」調用中添加'stderr = subprocess.STDOUT',看看會發生什麼。 –

+0

就是這樣,謝謝:) – swingsoneto

+0

很高興幫助!我爲後來遇到此問題的人提供了更好的可視性答案。 –

回答

3

有時應用程序將版本信息轉儲到STDERR而不是STDOUT。

您可以同時捕獲這樣的:

args = ("path\to\application.exe", "--version") 
subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]