您想使用该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
。)但通常这只是意味着有更多的机会弄错引用,而且由于您似乎已经多次弄错了,我认为您是这样更好。