Windows无法在subprocess.call()上find该文件

我收到以下错误:

WindowsError: [Error 2] The system cannot find the file specified 

我的代码是:

 subprocess.call(["<<executable file found in PATH>>"]) 

Windows 7,64位。 Python 3.x最新,稳定。

有任何想法吗?

谢谢,

我不知道为什么,但是,在我的Windows机器上,我不得不添加一个'shell= True'的电话。

例如,你可以input:

 import subprocess subprocess.call('dir', shell=True) 

希望这可以帮助,

道格拉斯

从文档引用:唯一需要在Windows上指定shell = True的时候,是希望执行的命令内置到shell中(例如dir或copy)。 您不需要shell = True来运行batch file或基于控制台的可执行文件。

在Windows上,我相信subprocess模块不会在PATH查找,除非您传递shell=True 。 但是,如果传递可能来自程序之外的参数,则shell=True可能会带来安全风险。 为了使subprocess shutil.which能够find正确的可执行文件,可以使用shutil.which 。 假设PATH的可执行文件名为frob

 subprocess.call([shutil.which('frob'), arg1, arg2]) 

(这适用于Python 3.3及更高版本。)

在Windows上,您必须通过cmd.exe进行调用。 正如Apalala提到的那样,Windows命令在cmd.exe中实现而不是单独的可执行文件。

例如

 subprocess.call(['cmd', '/c', 'dir']) 

/ c告诉cmd运行follow命令

这比使用shell = True更安全,它允许shell注入。

如果path有空格,是否引用?

当然,你正确地逃避了反斜杠,或者使用了斜线,对吗?

如果你正在使用powershell,那么它将是subprocess.call(['powershell','-command','dir']) 。 Powershell支持大部分的POSIX命令