Python子进程无法找到程序

1 投票
1 回答
1192 浏览
提问于 2025-04-17 17:25

我想从一个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 这个名字在你的代码中没有被定义,而不是说你的电脑上找不到这个命令。

撰写回答