2016-05-29 111 views
0

我有一個需要通過Python執行的.jar文件。嘗試使用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程序。我試着直接運行它並使用批處理文件,兩者都正常工作。

+1

嘗試使用'check_output'而不是'call'併發布結果。 – domoarrigato

+0

我假設你看過http://stackoverflow.com/questions/7372592/python-how-can-execute-a-jar-file-through-a-python-script和它鏈接到的其他三個問題。 –

+0

@ TadhgMcDonald-Jensen是的,我做了,我嘗試了所有的解決方案,但無濟於事。 Apoligies如果它看起來像重複,但我編輯它包括錯誤。 – RedCardOP

回答

1

一兩件事,經常的工作原理是利用在子shell=True選項,該執行命令,如果它是在一個shell(批處理文件或命令提示符)

所以做用:

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

應該爲你工作,但在太依賴這個之前請先閱讀Security Considerations section of the subprocess's documentation

通常不無殼工作的原因是因爲它找不到命令java不使用完整路徑,因此,如果您知道java可執行文件的完整路徑,這將是最好使用shell=True

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

我不知道這兩者之間的確切細節差異,但