2012-04-02 93 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