【问题标题】:Python pipe and command line argumentsPython 管道和命令行参数
【发布时间】:2012-04-16 00:10:11
【问题描述】:

我对 python 很陌生,我的工作中有一个脚本需要弄清楚。

我的脚本解析某个 exe 文件(我们称之为 Mywork.exe )的输出,该文件处理另一个二进制文件(我们称之为 processesBinary)。现在,我的脚本在某些时候想要取一个已处理二进制文件的名称并对其进行 objdump。我可以看到以前的作者(对我来说无法访问)已经使用这一行 sys.argv[1] 来获取processedBinary 的名称。我的脚本处理 MyWork.exe 的输出。到目前为止,我成功调用脚本的唯一方法是运行:

MyWork.exe 已处理二进制 | /usr/bin/python ./myScript.py -v

然后我的脚本会正确处理输出,但它根本没有获取 processesBinary 的名称(而是 sys.argv[1] 实际上是“-v”)。所以,我有几个问题:

1) 有没有更好的方法来运行我的脚本,以便 sys.argv[1] 是已处理二进制文件的名称? 2) 如果上一个问题的答案是否定的,有没有办法以更好的方式获取processedBinary 的名称? 3)您对脚本的实现/调用有更好的建议吗?

提前谢谢你!

【问题讨论】:

    标签: python pipe command-line-arguments sys


    【解决方案1】:

    您可以从 Python 脚本调用 MyWork.exe 并将 processesBinary 的名称传递给该脚本。

    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())
    

    输出现在是 MyWork.exe 的 stdout 和 stderr 的元组

    【讨论】:

    • 谢谢,但您的建议的问题是我们假设 MyWork 总是在同一个位置,但事实并非如此。
    • 这个怎么样:command = '%s %s' % (sys.argv[1], sys.argv[2]) 使第一个参数是 MyWork.exe 的位置,然后其次是要处理的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多