Comment exécuter une commande depuis python et recevoir le résultat? Si vous pouvez exécuter des commandes directement à partir du script, vous pouvez éviter de devoir exécuter des commandes pour traiter les résultats une fois l'exécution du script terminée.
Il existe plusieurs façons d'exécuter des commandes à partir de python, mais cette fois, je vais vous expliquer comment utiliser le module de sous-processus.
call Passez la commande que vous souhaitez exécuter au format liste et le processus sera exécuté. En cas de succès, 0 est renvoyé.
In [1]: import subprocess
In [2]: subprocess.call(["ls", "-la"])
Out[2]: 0
La définition de shell = True
est pratique car vous pouvez exécuter la commande comme suit.
In [3]: subprocess.call("ls -la", shell=True)
Out[3]: 0
check_call
Si vous passez une commande qui n'existe pas dans call
, vous n'obtiendrez que l'erreur command not found
, mais si vous utilisez check_call
vous pouvez lancer une exception appelée CalledProcessError
.
J'ai eu une exception appelée CalledProcessError
.
In [5]: subprocess.check_call("lddd", shell=True)
/bin/sh: lddd: command not found
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
<ipython-input-5-00471ece15fa> in <module>()
----> 1 subprocess.check_call("lddd", shell=True)
/Users/SoichiroMurakami/.pyenv/versions/anaconda-2.4.0/lib/python2.7/subprocess.pyc in check_call(*popenargs, **kwargs)
539 if cmd is None:
540 cmd = popenargs[0]
--> 541 raise CalledProcessError(retcode, cmd)
542 return 0
543
CalledProcessError: Command 'lddd' returned non-zero exit status 127
Il renvoie simplement «commande introuvable».
In [6]: subprocess.call("lddd", shell=True)
/bin/sh: lddd: command not found
Out[6]: 127
check_output
Vous pouvez exécuter une commande avec un argument et obtenir la sortie sous forme de chaîne. Ceci est pratique lorsque vous souhaitez utiliser le résultat de l'exécution de la commande dans un script.
In [9]: cal_output = subprocess.check_output("cal", shell=True)
In [10]: print cal_output
Novembre 2016
dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Ceci est un supplément pour les méthodes d'exécution de commande autres que le module de sous-processus. Il semble y avoir deux méthodes, mais elles ne sont actuellement pas recommandées.
command
)command
)Recommended Posts