【发布时间】:2015-12-30 04:38:02
【问题描述】:
我正在尝试从 Python 调用外部函数:该函数是 vboxmanage.exe,我正在通过子进程调用访问它。问题是调用找不到 vboxmanage.exe 程序,即使它列在路径变量中。我已经尝试了所有可能的组合,有路径,没有路径,列出完整的导演,没有列出导演,但调用永远找不到它:vboxmanage 不被识别为内部或外部命令、可运行程序或批处理文件。
这里是我的问题:
- 在 Windows 10 推荐提示中,为什么调用忽略我的路径变量,路径变量可以正常工作?我使用的是 shell=True,所以这不应该发生。
- 为什么不能指定程序的路径并像从命令提示符那样执行它(假设它不在路径变量中)。很久以前,这曾经在 DOS 下工作,但在 Windows 10 中却不行。即当我在命令提示符“c:\Program Files....\vboxmanage.exe”中输入时,它不会找到该程序。我必须先进入目录并执行它。
- 有没有办法通过调用命令手动导航到目录,然后调用第二个调用命令打开 vboxmanage.exe?
from subprocess import call
param="c:\\Program Files\Oracle\VirtualBox\\vboxmanage controlvm MacBook keyboardputscancode "+h
print (param)
call([param], shell=True)
【问题讨论】:
-
路径中有两个未转义的斜杠。另外,为什么要使用
shell=True?是否使用 Path 变量与是否使用 shell 无关。 -
shell=True不使用列表,但无论如何您也不需要它。如果您使用列表,则所有命令行元素都需要是单独的项目。这允许子进程构建一个命令行字符串,该字符串按照最常用的 MSVCargv规则进行转义。 -
例如:
param = [r"C:\Program Files\Oracle\VirtualBox\vboxmanage", "controlvm", "MacBook", "keyboardputscancode", h];subprocess.check_call(param)。
标签: python windows path subprocess call