【问题标题】:python subprocess error calling java classpython子进程错误调用java类
【发布时间】:2015-05-31 07:28:20
【问题描述】:

我正在尝试使用 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 类是包“src.ch.idsia.scenarios”中的“Main.java”。 java项目在Eclipse中。

注意事项:mac osx 10.9;蟒蛇2.7;爪哇 1.7;使用 jython 不是一种选择;从终端运行echo $CLASSPATH 会产生一个空行。

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

【问题讨论】:

  • 适当设置类路径不是问题吗?
  • 阅读什么是类路径。确保Main.class 存在于/Users/alavin/Code/MarioAI_ver02_April_2011/src/ch/idsia/scenarios/
  • @thekashyap Main.class/Users/alavin/Code/MarioAI_ver02_April_2011/bin/ch/idsia/scenarios/ 中。 IE。 'src/' 目录中的.java 文件在bin/ 目录中有它们对应的.class 文件。这是个问题吗?

标签: java python subprocess


【解决方案1】:

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

【讨论】:

  • 我仍然收到Error: Could not find or load main class Main
  • 尝试修改后的命令。尝试在命令行上运行它以帮助诊断任何问题。
  • 同样的错误,从命令行运行只返回值1。我也试过用sys.path.append('/Users/alavin/Code/MarioAI_ver02_April_2011')将java程序根目录添加到python系统路径,但还是同样的错误。跨度>
  • 1 是预期的输出吗?如果没有,那么您需要弄清楚如何从命令行运行 Java 程序,然后将相同的命令放入您的 Python 代码中。
  • 0 是预期的输出。您能否告诉我如何从命令行正确运行?我认为问题出在我的 CLASSPATH 或 python 系统路径,或两者兼而有之。
【解决方案2】:

类路径是问题;我需要在来自终端的调用中包含 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 -> 运行配置 -> 类路径选项卡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2016-06-17
    • 2013-01-19
    • 2015-06-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多