2009-12-11 73 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

相關問題