【问题标题】:Attempting to execute .jar file using python尝试使用 python 执行 .jar 文件
【发布时间】:2016-05-30 02:11:25
【问题描述】:

我有一个需要通过 Python 执行的 .jar 文件。

我当前的代码是

import subprocess
subprocess.check_output(['java', '-jar', 'StatsCalc.jar'])

我打印出了错误信息:

Traceback (most recent call last):
File "C:\Users\ali\Documents\Java Stuff\RedditFitnessCalc\out\artifacts\RedditFitnessCalc_jar\pythonBotScript.py", line 6, in <module>
p = subprocess.check_output(['java', '-jar', 'RedditFitnessCalc.jar'])
File "C:\Program Files (x86)\Python 3\lib\subprocess.py", line 620, in check_output
raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command '['java', '-jar', 'RedditFitnessCalc.jar']' returned non-zero exit status 2

当我运行它时,会弹出一个窗口并立即消失。它是一个带有 GUI 的 java 程序。我尝试直接使用批处理文件运行它,并且都可以正常工作。

【问题讨论】:

  • 尝试使用check_output 代替call 并发布结果。
  • 我假设您已经查看了 stackoverflow.com/questions/7372592/… 以及它链接到的其他三个问题。
  • @TadhgMcDonald-Jensen 是的,我做到了,我尝试了所有解决方案,但无济于事。如果它看起来像重复但我对其进行了编辑以包含错误,请致歉。
  • @domoarrigato 正如你所说,我已经发布了错误消息,但我似乎无法解读问题所在。
  • 如果您尝试使用shell=True 会怎样?

标签: python


【解决方案1】:

经常起作用的一件事是在子进程上使用shell=True 选项,这会像在shell(批处理文件或命令提示符)中一样执行命令

所以使用:

import subprocess
subprocess.call(['java', '-jar', 'StatsCalc.jar'],shell=True)

应该对你有用,但是在过度依赖这个之前,请阅读Security Considerations section of the subprocess's documentation

通常它在没有 shell 的情况下无法工作的原因是因为它无法在不使用完整路径的情况下找到命令 java,所以如果您知道 java 可执行文件的完整路径,则最好使用 shell=True

import subprocess
subprocess.call(['path/to/java', '-jar', 'StatsCalc.jar'])

我不知道这两者之间区别的确切细节,但是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2021-03-06
    • 2015-11-06
    • 2012-07-28
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多