2009-12-11 72 views
4

我有一个Windows控制台应用程序返回一些文本。我想阅读Python脚本中的文本。我已经尝试使用os.system读取它,但它无法正常工作。Python 2.6:从Windows控制台应用程序中读取数据。 (os.system?)

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

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

我需要做些什么来获得我想要的行为?

回答

8

请使用子

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

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

+2

这工作。要得到的文字,我这样做: 结果= foo.stdout.readlines() 和'结果'有我想要的文字。 – Jeremy 2009-12-11 04:42:32

+0

是的,.readlines()或.read()将工作 – YOU 2009-12-11 04:44:47

+0

+1用于建议正确的方法™来做到这一点。 :) – jathanism 2009-12-11 04:55:33

2

警告:在UNIX系统上这只作品。

我发现subprocess是所有你想要的输出都被捕获的过度杀伤力。我建议使用commands.getoutput()

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

技术上讲,它只是在做你的名义popen(),但它的这个基本目的简单得多。

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

另外,如果你需要同时退出状态和命令输出,使用commands.getstatusoutput(),它返回(状态输出)的2元组:

>>> foo = commands.getstatusoutput('bar') 
>>> foo 
(32512, 'sh: bar: command not found') 
+0

我试过这个,但它似乎呛在'{'字符。 “'{'不被识别为内部或外部命令,\不可修改的程序或 批处理文件。” – Jeremy 2009-12-11 04:40:45

+0

“{”来自哪里! – jathanism 2009-12-11 04:47:32

+0

对不起,我应该解释一下..'{'是exe文件返回的文字中的一个字符。 – Jeremy 2009-12-11 04:49:29

相关问题