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命令