调用java类的python子进程错误

时间:2015-03-27 03:18:33

标签: java python subprocess

我尝试使用subprocess.call()从python脚本运行java类:

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类是" Main.java"在包" src.ch.idsia.scenarios"。 java项目在Eclipse中。

备注:mac osx 10.9; python 2.7; java 1.7;使用jython不是一个选择;从终端运行echo $CLASSPATH会给出一个空行。

提前感谢您的任何帮助/指导。

2 个答案:

答案 0 :(得分:2)

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

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'])

答案 1 :(得分:0)

类路径是问题;我需要在终端的呼叫中包含jar文件:java -cp bin/MarioAI/:lib/asm-all-3.3.jar:lib/jdom.jar ch.idsia.scenarios.Main。因此在python中运行subprocess命令将是:

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 - >运行配置 - > Classpath选项卡。