subprocess.Popen使用参数调用程序

时间:2018-12-18 20:27:11

标签: python subprocess

我有一个EXE文件,可以这样称呼:

Extractor64.exe -F C:\File1 -E  C:\file2

尝试从subprocess.Popen调用此方法时,出现找不到文件错误:

t=subprocess.Popen("start C:\yardi_backup_v2\Extractor64.exe -F C:\yardi_backup_v2\miadmfggp_live_Full_TKDB1A112_201812180000.Lts.bak -E  C:\yardi_backup_v2\tmp\extracted.bak")
t.wait()

什么是正确的结构?

2 个答案:

答案 0 :(得分:1)

  1. start是内置的shell。它实际上不是可执行文件。因此,如果没有shell=True,则无法调用它。那是您的主要错误:系统中没有start.exe。但是还有更多...
  2. 由于您似乎正在等待,因此无需在后台启动进程。要么在没有start的情况下启动它,然后就不等待,或者只是等待:不要使用start,所以现在您可以改而使用check_call
  3. 使用列表而不是字符串作为参数。
  4. 在字符串中使用反斜杠需要转义/原始字符串前缀,在您的情况下,\t变成“ TAB字符”

我的建议:

t=subprocess.check_call([r"C:\yardi_backup_v2\Extractor64.exe",
                         "-F",r"C:\yardi_backup_v2\miadmfggp_live_Full_TKDB1A112_201812180000.Lts.bak",
                         "-E",r"C:\yardi_backup_v2\tmp\extracted.bak"])

答案 1 :(得分:0)

您尝试过运行而不是Popen吗?

subprocess.run(['Extractor64.exe', '-F', r'C:\File1','-E' , r'C:\file2'])

您可以在此处阅读全部内容:https://docs.python.org/3/library/subprocess.html#subprocess.run

它允许shell = True,等等。