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 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?
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.
Ç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
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] )