1

我正在尝试从 python 脚本调用 java 应用程序。安装 Java 时,将java.exe程序添加到c:\windows\system32文件夹中,该文件夹包含在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 版本是“Win32 上的“2.7.2(默认,2011 年 6 月 12 日,15:08:59)[MSC v.1500 32 位(英特尔)]”。我正在运行 Windows 7 专业版。

4

1 回答 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在您的代码java中定义,而不是在您的机器上未找到该命令。

于 2013-02-28T10:18:47.640 回答