我尝试使用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
会给出一个空行。
提前感谢您的任何帮助/指导。
答案 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选项卡。