2013-02-28 46 views
1

我想从python脚本调用java应用程序。安装Java时,将java.exe程序添加到c:\windows\system32文件夹,该文件夹包含在PATH环境变量中。Python子进程找不到程序

运行

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。在Win32上列出的Python版本是“2.7.2(默认,2011年6月12日,15:08:59)[MSC v.1500 32位(Intel)]”。我正在运行Windows 7专业版。

+0

'java.exe'不在'C:\ Windows \ System32'中。它在'C:\ Program Files文件(x86)\ Java \ jre \ bin' – dmg 2013-02-28 10:29:01

+0

安装java(JDK 1.7.0_15)后,确实有一个'c:\ Program Files \ Java \ jdk1.7.0_15 \ bin \ java.exe“,但在'System32'文件夹中也有一个。在运行'where java'时,会列出system32之一。 – DieterDP 2013-02-28 10:35:27

+0

现在JDK没有写在那里。无论如何,你的问题回答如下:) – dmg 2013-02-28 10:36:58

回答

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一直没有找到您机。

+0

没错,没有创建可执行文件的错误是Windows上的WindowsError和大多数Linux发行版上的OSError。 – dmg 2013-02-28 10:27:22

+0

你说得对,在写这个问题时,我写下了一个错误命令的错误。我已经更新了这个问题。 – DieterDP 2013-02-28 10:40:38

+0

@DieterDP:在这种情况下,GIS插件正在改变你的Python代码运行的环境。没有任何关于该插件的知识,我们几乎没有什么可以帮助你。 – 2013-02-28 10:43:39