Python子进程无法找到程序
我想从一个Python脚本中调用一个Java应用程序。当我安装Java时,系统会在 c:\windows\system32
文件夹中添加一个 java.exe
程序,而这个文件夹是包含在 PATH
环境变量里的。
运行
import subprocess
import os
subprocess.call("java") //or "c:/windows/system32/java.exe"
结果是
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Program Files (x86)\Quantum GIS Lisboa\apps\Python27\Lib\subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "c:\Program Files (x86)\Quantum GIS Lisboa\apps\Python27\Lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "c:\Program Files (x86)\Quantum GIS Lisboa\apps\Python27\Lib\subprocess.py", line 893, in _execute_child
startupinfo)
WindowsError: [Error 2] Het systeem kan het opgegeven bestand niet vinden
我进一步调查了一下,尝试用同样的方式在控制台(cmd
)中运行。当我在这个控制台中输入 dir c:\windows\system32
时,发现 java.exe
并没有列出来!实际上,与在“正常”控制台中运行同样的命令相比,还有很多文件都没有显示。
我完全不知道这可能是什么原因,因为在另一台电脑上同样的操作是可以正常工作的。我知道我可以通过直接调用Java的安装路径来绕过这个问题,而不是使用system32文件夹中的可执行文件,但我想找到这个问题的根源。
这个问题出现在一个Quantum Gis插件中。Quantum Gis使用的是自带的Python安装,所以我并没有自己安装Python。列出的Python版本是“2.7.2(默认,2011年6月12日,15:08:59)[MSC v.1500 32位(Intel)]在Win32上”。我正在使用Windows 7专业版。
1 个回答
4
不,subprocess.call("java")
绝对不会导致出现 NameError
错误。
你实际上是没有加引号在运行这个命令:
>>> import subprocess
>>> subprocess.call(java)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'java' is not defined
NameError
错误是 Python 在告诉你,java
这个名字在你的代码中没有被定义,而不是说你的电脑上找不到这个命令。