0

我有一个 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()

什么是正确的结构?

4

2 回答 2

1
  1. start是一个内置的shell。它不是真正的可执行文件。所以你不能没有shell=True. 这是您的主要错误:start.exe系统中没有。但还有更多...
  2. 无需在后台启动进程,因为您似乎在等待它。要么在没有start并且不要等待的情况下启动它,或者只是等待:不要使用start,所以现在你可以使用它check_call
  3. 使用列表而不是字符串作为参数。
  4. 在字符串中使用反斜杠需要转义/原始字符串前缀,在您的情况下\t变为“TAB char”

我的建议:

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"])
于 2018-12-18T20:34:45.143 回答
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 等。

于 2018-12-18T20:37:27.860 回答