Python: Comment puis-je exécuter un fichier jar par le biais d'un script python
J'ai été à la recherche d'une réponse pour savoir comment exécuter un fichier jar java via python et après avoir regardé:
Comment faire pour exécuter Python oeuf fichiers directement sans les installer?
J'ai essayé de faire ce qui suit (à la fois mon pot et python fichier 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'])
Ni ont travaillé. Alors, je me disais que je devrais utiliser Python à la place, mais je pense qu'il doit y a avoir un moyen plus facile d'exécuter des fichiers jar via python.
Avez-vous une idée de ce que je peut faire le mal? Ou, est-il un autre site que j'ai de l'étude de plus sur mon problème?
- Quelles erreurs avez-vous? Est le
PATH
env var-elle correctement réglée? - Le chemin que j'utilise est de copier-coller, de sorte qu'il est correctement inséré. Le problème est que je suis en train d'insérer celle-ci dans une méthode de la fonction en python, comme def blender(): os.système(java-jar Blender.jar) par exemple, et le temps d'INACTIVITÉ dit: syntaxe non Valide dans ma méthode.
- J'ai essayé les deux d'entre eux de différentes façons, en utilisant les chemins d'accès absolus, mais toujours la même erreur. Je suis sous macos
- Il n'y a pas de guillemets autour de
java -jar Blender
. Est-ce juste un copier-coller de l'erreur? - Le chemin que j'ai inséré est de copier-coller, c'est pourquoi je crois que c'est correct. Je suppose que vous parlez de la deuxième code, et que je dois insérer "" guillemets droit? En outre, quelle solution est la meilleure?
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser un processus secondaire de cette façon:
Mais, si vous avez correctement configuré
/proc/sys/fs/binfmt_misc/jar
vous devriez être en mesure d'exécuter le pot directement, comme vous l'avez écrit.Alors, quelle est exactement l'erreur que vous obtenez?
Merci de poster quelque part, tous les résultats que vous obtenez à partir de l'échec de l'exécution.
os.path.abspath(os.path.join(os.path.dirname(__file__), 'Blender.jar'))
. Avez-vous réussi à obtenir votre bocal en cours d'exécution, btw?subprocess.call( ... , env={'JAVA_OPTS':' ... '})
subprocess.call(['java', '-jar', 'Blender.jar', 'arg1', 'arg2', 'however_many_args_you_need'])
{TypeError}bufsize must be an integer
quand je structure monsubprocess.call
comme ça. Si j'écris simplement la commande commejava -jar file.jar arg1
- je obtenirError: Unable to access jarfile
erreur.Cela fonctionne toujours pour moi:
Avec args: exemple concret à l'aide de la Fermeture du Compilateur (https://developers.google.com/closure/) à partir de python
(voir aussi ici Lors de l'utilisation de l'os.execlp, pourquoi `python` besoins `python` que argv[0])