2012-04-02 92 views
0

我對python很陌生,我在我的工作中需要弄清楚腳本。Python管道和命令行參數

我的腳本解析了一些處理另一個二進制文件(我們稱之爲processedBinary)的exe文件(我們稱之爲Mywork.exe)的輸出。現在,我的scrpit在某個時候想要取得一個processedBinary的名字並在其上做一個objdump。我可以看到以前的作者(對於我來說無法訪問)已經使用這行sys.argv [1]來獲取processedBinary的名稱。我的腳本處理MyWork.exe的輸出。到目前爲止,我成功調用腳本的唯一方法是運行:

MyWork.exe processedBinary |/usr/bin/python ./myScript.py -v

然後我的腳本正確地處理輸出,但它根本沒有獲取processedBinary的名字(而是sys.argv [1]實際上是「-v 「)。所以,我有幾個問題:

1)有沒有更好的方式來運行我的腳本,以便sys.argv [1]是processedBinary的名稱? 2)如果上一個問題的答案是否定的,是否有一種方法可以更好地獲取processedBinary的名稱? 3)您是否對腳本的實現/調用有更好的建議?

預先感謝您!

回答

0

您可以從Python腳本中調用MyWork.exe並將processedBinary的名稱傳遞給該腳本。現在

import subprocess 
import sys 
command = 'MyWork.exe %s' % (sys.argv[1]) 
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
proc.wait() 
output = (proc.stdout.read(), proc.stderr.read()) 

輸出爲stdout和MyWork.exe的標準錯誤

+0

謝謝你的元組,但你的建議的問題是,我們認爲MYWORK是在同一個位置始終,但事實並非如此。 – Nikola 2012-04-02 11:15:13

+0

這是怎麼回事: command ='%s%s'%(sys.argv [1],sys.argv [2]) 使第一個參數成爲MyWork.exe的位置,第二個成爲文件被處理。 – Andrew 2012-04-02 11:28:50