我有一个需要通过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程序。我尝试直接运行它并使用批处理文件,两者都可以正常工作。
答案 0 :(得分:1)
经常使用的一件事是在子进程上使用shell=True
选项,这就像在shell中一样执行命令(批处理文件或命令提示符)
所以使用:
import subprocess
subprocess.call(['java', '-jar', 'StatsCalc.jar'],shell=True)
应该适合您,但请在阅读Security Considerations section of the subprocess's documentation之前先阅读{{3}}。
通常它在没有shell的情况下不起作用的原因是因为它在没有使用完整路径的情况下找不到命令java
,所以如果你知道java
可执行文件的完整路径,那么它将优先于使用shell=True
import subprocess
subprocess.call(['path/to/java', '-jar', 'StatsCalc.jar'])
我不知道这两者之间差异的具体细节,但