Python: Как я могу выполнить файл JAR через скрипт Python - PullRequest
31 голосов
/ 10 сентября 2011

Я искал ответ о том, как выполнить jav-файл java через python и после просмотра:

Выполнить .jar из Python

Как я могу заставить мой скрипт python (версия 2.5) запускать файл 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.

Ты хоть представляешь, что я могу сделать не так?Или есть другой сайт, который я изучаю больше о моей проблеме?

Ответы [ 3 ]

51 голосов
/ 10 сентября 2011

Я бы использовал подпроцесс следующим образом:

import subprocess
subprocess.call(['java', '-jar', 'Blender.jar'])

Но, если у вас правильно настроен /proc/sys/fs/binfmt_misc/jar, вы сможете запустить jar напрямую, как вы написали.

Итак, какую именно ошибку вы получаете?Пожалуйста, опубликуйте где-нибудь всю информацию, полученную в результате неудачного выполнения.

9 голосов
/ 28 февраля 2014

Это всегда работает для меня:

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
1 голос
/ 17 февраля 2015

С аргументами: конкретный пример с использованием 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] )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...