Python: как я могу выполнить файл jar через python script
Я искал ответ о том, как выполнить java файл jar через python и после просмотра:
Выполнить .jar из Python
Как я могу получить свой python (версия 2.5) script для запуска файла jar внутри папки вместо командной строки?
Как запускать файлы яиц Python напрямую, не устанавливая их?
Я попытался сделать следующее (оба файла jar и python находятся в одном каталоге):
import os
if __name__ == "__main__":
os.system("java -jar Blender.jar")
и
import subprocess
subprocess.call(['(path)Blender.jar'])
Ничего не сработало. Итак, я думал, что я должен использовать Jython вместо этого, но я думаю, что должен быть более простой способ выполнить jar файлы через python.
Есть ли у вас идеи, что я могу сделать неправильно? Или, есть ли какой-нибудь другой сайт, на котором я больше разбираюсь в своей проблеме?
Ответы
Ответ 1
Я бы использовал подпроцесс следующим образом:
import subprocess
subprocess.call(['java', '-jar', 'Blender.jar'])
Но если у вас правильно настроенный /proc/sys/fs/binfmt_misc/jar
, вы должны иметь возможность запускать банку напрямую, как вы писали.
Итак, какая именно ошибка вы получаете?
Пожалуйста, разместите где-нибудь весь вывод, который вы получаете от неудавшегося выполнения.
Ответ 2
Это всегда работает для меня:
from subprocess import *
def jarWrapper(*args):
process = Popen(['java', '-jar']+list(args), stdout=PIPE, stderr=PIPE)
ret = []
while process.poll() is None:
line = process.stdout.readline()
if line != '' and line.endswith('\n'):
ret.append(line[:-1])
stdout, stderr = process.communicate()
ret += stdout.split('\n')
if stderr != '':
ret += stderr.split('\n')
ret.remove('')
return ret
args = ['myJarFile.jar', 'arg1', 'arg2', 'argN'] # Any number of args to be passed to the jar file
result = jarWrapper(*args)
print result
Ответ 3
С args: конкретный пример с использованием Closure Compiler (https://developers.google.com/closure/) из python
import os
import re
src = test.js
os.execlp("java", 'blablabla', "-jar", './closure_compiler.jar', '--js', src, '--js_output_file', '{}'.format(re.sub('.js$', '.comp.js', src)))
(см. здесь При использовании os.execlp, почему` python` нуждается в `python` как argv [0])