2014-02-14 35 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]