python 调用子进程错误 java class

python subprocess error calling java class

我正在尝试从 python 脚本 运行 java class subprocess.call():

import os
import subprocess

java_file = os.getcwd() + "/src/ch/idsia/scenarios/Main.java"
if os.path.isfile(java_file):
  java_class, _ = os.path.splitext(java_file)
  cmd = ['java', java_class]
  subprocess.call(cmd, shell=False)

但是 运行 宁这个 python 脚本给了我 Error: Could not find or load main class .Users.alavin.Code.MarioAI_ver02_April_2011.src.ch.idsia.scenarios.Main。我还为 java_class 尝试了以下变体: "Users.alavin.Code.MarioAI_ver02_April_2011.src.ch.idsia.scenarios.Main" "src.ch.idsia.scenarios.Main"

python 脚本位于 "Users/alavin/Code/MarioAI_ver02_April_2011/"。 java class 是包 "src.ch.idsia.scenarios" 中的 "Main.java"。 java 项目在 Eclipse 中。

注释:mac osx 10.9; python2.7; java1.7;使用 jython 不是一种选择; 运行ning echo $CLASSPATH 从终端给出一个空行。

提前感谢您的任何 help/guidance。

尝试使用 -cp 选项指定 class 路径,例如

java -cp /Users/alavin/Code/MarioAI_ver02_April_2011/src/ch/idsia/scenarios Main

所以,

subprocess.call(['java', '-cp', '/Users/alavin/Code/MarioAI_ver02_April_2011/src/ch/idsia/scenarios', 'Main'])

编辑

因为 Main 在包 src.ch.idsia.scenarios 中,请尝试将命令修改为:

subprocess.call(['java', '-cp', '/Users/alavin/Code/MarioAI_ver02_April_2011', 'src.ch.idsia.scenarios.Main'])

类路径是问题;我需要在来自终端的调用中包含 jar 文件:java -cp bin/MarioAI/:lib/asm-all-3.3.jar:lib/jdom.jar ch.idsia.scenarios.Main。所以 运行 python 中的子进程命令将是:

import subprocess

cmd = ['java', '-cp', 'bin/MarioAI/:lib/asm-all-3.3.jar:lib/jdom.jar', 'ch.idsia.scenarios.Main']
subprocess.call(cmd, shell=False)

通过 Eclipse 检查类路径中的 jar 文件:右键单击 Main.java -> 运行 配置 -> 类路径选项卡。