4

我有一个返回一些文本的 Windows 控制台应用程序。我想在 Python 脚本中阅读该文本。我曾尝试使用 os.system 阅读它,但它无法正常工作。

import os
foo = os.system('test.exe')

假设 test.exe 返回“bar”,我希望将变量 foo 设置为“bar”。但发生的情况是,它在控制台上打印“bar”并且变量 foo 设置为 0。

我需要做什么才能获得我想要的行为?

4

2 回答 2

8

请使用子进程

import subprocess
foo = subprocess.Popen('test.exe',stdout=subprocess.PIPE,stderr=subprocess.PIPE)

http://docs.python.org/library/subprocess.html#module-subprocess

于 2009-12-11T04:26:35.137 回答
2

警告:这仅适用于 UNIX 系统。

subprocess当你想要的只是输出被捕获时,我发现这太过分了。我建议使用commands.getoutput()

>>> import commands
>>> foo = commands.getoutput('bar')

从技术上讲,它只是popen()代表你做一个,但对于这个基本目的来说它要简单得多。

顺便说一句,os.system()不返回命令的输出,它只返回退出状态,这就是它不适合你的原因。

或者,如果您需要退出状态和命令输出,请使用commands.getstatusoutput(),它返回 (status, output) 的 2 元组:

>>> foo = commands.getstatusoutput('bar')
>>> foo
(32512, 'sh: bar: command not found')
于 2009-12-11T04:34:52.673 回答