我收到以下错误:
WindowsError: [Error 2] The system cannot find the file specified
我的代码是:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7,64位。Python 3.x最新,稳定。
有任何想法吗?
谢谢,
我收到以下错误:
WindowsError: [Error 2] The system cannot find the file specified
我的代码是:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7,64位。Python 3.x最新,稳定。
有任何想法吗?
谢谢,
Answers:
当命令是内置的shell时,请在调用中添加“ shell = True”。
例如,dir
您将输入:
import subprocess
subprocess.call('dir', shell=True)
引用文档:
在Windows上唯一需要指定shell = True的时间是将要执行的命令内置到shell中(例如dir或copy)。您不需要shell = True即可运行批处理文件或基于控制台的可执行文件。
dir.exe
虽然有一个/bin/ls
在* nix中。dir
由CMD.EXE实现,就像cd
由bash实现。
PATH
来自os.environ
和手动搜索。
在Windows上,我相信除非您通过subprocess
,PATH
否则shell=True
该模块不会进入,因为它CreateProcess()
在后台使用。但是,shell=True
如果传递的参数可能来自程序外部,则可能存在安全风险。为了subprocess
仍然能找到正确的可执行文件,你可以使用shutil.which
。假设您中的可执行文件PATH
名为frob
:
subprocess.call([shutil.which('frob'), arg1, arg2])
(这适用于Python 3.3及更高版本。)
经过大量的抓挠之后,我发现在64位计算机上运行32位版本的python时,运行位于C:\ Windows \ System32 \中的文件是一个潜在的问题,这是由于Windows试图使该过程变得更智能,以及将对C:\ Windows \ System32的调用重定向到C:\ Windows \ SysWOW64。
我在这里找到了如何解决此问题的示例:http : //code.activestate.com/recipes/578035-disable-file-system-redirector/
引用文档:
“在Python 3.5之前,这三个函数包含用于子过程的高级API。您现在可以在许多情况下使用run(),但是许多现有代码都调用了这些函数。”
因此:对于Python 3.5及更高版本,请使用subprocess.run而不是subprocess.call