0

我正在使用可以在命令行中运行的第三方软件,该软件由 .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 调用这个命令吗?

4

2 回答 2

1

您想使用该subprocess模块。

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

幸运的是,文档非常清晰,并解释了如何做你可能想做的每一件事。

同时,我有 95% 的把握你的命令行中的一些引号是错误的。例如,/inbook参数以 a 开头,"直到参数开始时才会关闭/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 中为 a bytes)返回。

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

同时,如果将参数写成一个大字符串而不是四个单独字符串的列表更容易,那么您可以这样做。(仅在 Windows 上;除非您使用 .,否则不要在 Unix 上这样做shell=True。)但通常这只是意味着有更多的机会弄错引用,而且由于您似乎已经多次弄错了,我认为您是这样更好。

于 2013-11-11T23:29:48.103 回答
0

I'm a newbie, but would you like to try this code:

---EDIT--- I've edited so much according to @Abarnert's suggestions that this code is more his than mine, so don't up-vote me. I'm leaving the solution for sake of the fact that now it should work.

The code:

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

Thanks @Abarnert!

于 2013-11-11T23:30:40.030 回答