尝试使用Python中的参数调用可执行文件

时间:2013-11-11 23:03:00

标签: python cmd arguments

我正在使用第三方软件,我可以在命令行中运行,该软件包含.exe文件以及通过参数传递的几个开关。目标是使用Python编写脚本,但我是Python编程的初学者,可以在Python中翻译以下命令行时使用一些帮助。参数由“/”分隔,参数为/ inbook1,/ inbook2,/ report

C:\Program Files(x86)\Florencesoftt\diffenginex\diffenginex.exe /inbook1:"c:\users\file.xlsx /inbook2: "c:\users\file2.xlsx /report:"c:\users\file3.xlsx"

那么,是否有人能够帮助我使用Python调用此命令?

2 个答案:

答案 0 :(得分:1)

您想使用subprocess模块。

您想要如何使用它取决于您想要做什么。例如,您是否希望将程序的输出与输出混合,或者是否要将其捕获为字符串?你想等到它完成,还是在后台开始?

幸运的是,文档非常清楚,并解释了如何完成您可能想要做的每件事。

与此同时,我95%肯定你的命令行上有一些引号错误。例如,/inbook参数以"开头,在/inbook2参数开始之前不会关闭。

无论如何,试着猜测你想要什么,这是一种可能性:

args = [r'C:\Program Files(x86)\Florencesoftt\diffenginex\diffenginex.exe',
        r'/inbook1:"c:\users\file.xlsx"',
        r'/inbook2:"c:\users\file2.xlsx"',
        r'/report:"c:\users\file3.xlsx"']
output = subprocess.check_output(args)

check_output函数运行程序,等待它完成,如果它以错误返回代码结束则引发异常,并将程序的输出作为字符串返回(或者,在Python 3中,{{{ 1}})。

此处不需要额外的双引号 (特别是因为路径名中没有空格),但由于它们在原始代码中,因此我将它们原样保留。通常,Python会尽一切可能使目标程序将每个单独的参数视为单个参数,即使您的参数中包含空格或引号,因此您不必担心这一点。

但是,如果把参数写成一个大字符串更容易,而不是作为四个单独字符串的列表,那么你可以这样做。 (仅限在Windows上;除非您使用bytes,否则不要在Unix上执行此操作。)但通常这意味着更多机会使引用错误,并且因为您似乎已经多次错误,我认为你这样做会更好。

答案 1 :(得分:0)

我是新手,但你想试试这段代码:

--- --- EDIT 我根据@ Abarnert的建议编辑了这么多,这个代码比我的更多,所以不要向我投票。我正在离开解决方案,因为它现在应该有效。

代码:

import subprocess
basecommand = r"C:\Program Files(x86)\Florencesoftt\diffenginex\diffenginex.exe"
inbook1 = r"c:\users\file.xlsx"
inbook2 = r"c:\users\file2.xlsx"
report = r"c:\users\file3.xlsx"

inbook1 = r'/inbook1:"' + inbook1 + '"'
inbook2 = r'/inbook2:"' + inbook2 + '"'
report = r'/report:"' + report + '"'
subprocess.call([basecommand, inbook1, inbook2, report])

谢谢@Abarnert!