java - python子进程调用java类时出错

标签 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脚本给了我错误:无法找到或加载主类.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 类是包“src.ch.idsia.scenarios”中的“Main.java”。 java 项目位于 Eclipse 中。

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

预先感谢您提供的任何帮助/指导。

最佳答案

尝试使用-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'])

关于java - python子进程调用java类时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292724/

相关文章:

Java Chat系统协议(protocol)设计,如何判断消息类型?

Python pandas - 分桶和求和

python - 子进程打开以运行命令(HDFS/hadoop)

python - 终止子进程的命令执行

python - subprocess.Popen 不是线程安全的吗?

java.lang.IllegalStateException : Fragment ProgressDialog{x) not associated with a fragment manager 错误

java - 我如何在Java上检测声音频率

java - 为什么我的 JDBC 连接中出现 ArrayIndexOutOfBoundsException?

python - 从文件中提取一个热编码到数据集中

python - 使用 Python 线程对具有速率限制的慢速 API 进行数千次调用