Je rencontre un problème étrange avec la fonction subprocess.call(). Je suis en train d'exécuter la commande 'jar' de Java en utilisant subprocess.call(). Voici le code:subprocess.call() échoue sous Mac et Linux
import os
import subprocess
def read_war():
war_file_path = "jackrabbit-webapp-2.6.5.war"
java_home = os.environ['JAVA_HOME']
jar_path = os.path.join(java_home, 'bin', 'jar')
jar_cmd = jar_path + ' tvf ' + war_file_path
print "command to be executed is : " + jar_cmd
subprocess.call(jar_cmd)
read_war()
J'utilise Python v2.7.3 sur Windows et Linux (Oracle Enterprise Linux). Sur Windows 7, je vois le contenu du fichier war affiché. Sous Linux, cependant, je vois un « tel fichier ou répertoire » erreur .:
$ python example.py
command to be executed is : /usr/local/tools/jdk1.7.0_15/bin/jar tvf jackrabbit-webapp-2.6.5.war
Traceback (most recent call last):
File "example.py", line 24, in <module>
read_war()
File "example.py", line 23, in read_war
subprocess.call(jar_cmd)
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
$
J'ai essayé la commande « /usr/local/tools/jdk1.7.0_15/bin/jar TVF jackrabbit- webapp-2.6.5.war 'à partir de l'invite de commande et cela fonctionne très bien. Donc, rien ne va pas avec la commande. J'ai essayé différentes combinaisons de subprocess.call() - en passant une chaîne de caractères, en passant une liste etc. Aucun d'eux n'a fonctionné. Toute aide serait appréciée.
Résolu en utilisant shell = True comme suggéré par tdelaney. Je pourrais avoir juré que j'ai utilisé cette approche et il a échoué. Doit avoir été une erreur de l'opérateur. Merci encore. –