2013-01-16 42 views
1

我有一個可執行的jar將一些信息輸出到屏幕上。我想從輸出中捕獲一個具體的數字,這是成本。例如,有一行「成本= 10」,我想在我運行jar文件N次時獲得一個成本列表。我想用python腳本自動執行此過程,但由於我是Python新手,我不知道從Python腳本中從stdout中提取某些數據的最佳方法。做這樣的工作最好的方法是什麼?如何從Python中的可執行jar捕獲信息?

def wrapper(*args): 
    process = Popen(list(args), stdout=subprocess.PIPE) 
    process.communicate() 
    return process 

linkFileList = [ join(linkDir,f) for f in listdir(linkDir) if isfile(join(linkDir,f)) ] 
nodeFileList = [ join(nodeDir,f) for f in listdir(nodeDir) if isfile(join(nodeDir,f)) ] 
pairFileList = [ join(pairDir,f) for f in listdir(pairDir) if isfile(join(pairDir,f)) ] 
size = len(linkFileList) 
for count in range(0, size): 
    x = wrapper('java', '-jar', 'C:\\Users\\fatma\\Documents\\workspace\\HeuristicRunnable.jar', nodeFileList[count], linkFileList[count], pairFileList[count]) 
+0

有堆棧溢出幾個問題,這可以被視爲重複,檢查這些:獲取輸出](http://stackoverflow.com/questions/7604621/call-external-program-from-python-and-get-its-output)或[閱讀輸出](http://stackoverflow.com/questions/3804727/ python-subprocess-reading-output-from-subprocess) –

回答

2

你很近。要做到這一點,而不是:

def wrapper(*args): 
    process = Popen(list(args), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    stdout, stderr = process.communicate() 
    return stdout, stderr 

變量stdoutstderr將對應於輸出和錯誤輸出從罐子簡單的字符串。一旦你使用了它,我真的不認爲你可以用process變量做任何事情,所以在返回它的時候確實沒什麼意義。

(我也包括代碼,你需要獲得的情況下,標準錯誤也被證明是有用的)

+0

感謝您的回答,我如何從函數返回的stdout中提取信息? –