web-dev-qa-db-fra.com

Python: Comment puis-je exécuter un fichier jar via un script python

Je cherchais une réponse pour savoir comment exécuter un fichier jar Java via python et après avoir regardé:

Exécuter .jar à partir de Python

Comment puis-je obtenir mon script python (version 2.5) pour exécuter un fichier jar dans un dossier au lieu de la ligne de commande?

Comment exécuter Python Egg fichiers directement sans les installer?

J'ai essayé de faire ce qui suit (mon pot et python se trouve dans le même répertoire):

import os

if __name__ == "__main__":
    os.system("Java -jar Blender.jar")

et

import subprocess

subprocess.call(['(path)Blender.jar'])

Aucun n'a fonctionné. Donc, je pensais que je devrais utiliser Jython à la place, mais je pense qu'il doit y avoir un moyen plus facile d'exécuter des fichiers jar via python.

Avez-vous une idée de ce que je peux faire de mal? Ou, y a-t-il un autre site que j'étudie davantage sur mon problème?

32
Dimitra Micha

J'utiliserais le sous-processus de cette façon:

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

Mais, si vous avez un /proc/sys/fs/binfmt_misc/jar Correctement configuré, vous devriez pouvoir exécuter le pot directement, comme vous l'avez écrit.

Alors, quelle est exactement l'erreur que vous obtenez? Veuillez publier quelque part toutes les sorties que vous obtenez de l'échec de l'exécution.

52
redShadow

Ça fonctionne toujours pour moi:

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
9
bbeaudoin

Avec args: exemple concret utilisant Closure Compiler ( https://developers.google.com/closure/ ) à partir de 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)))

(voir aussi ici Quand vous utilisez os.execlp, pourquoi `python` a besoin de` python` comme argv [0] )

1
Wajih