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 -> 运行 配置 -> 类路径选项卡。
我正在尝试从 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 -> 运行 配置 -> 类路径选项卡。