Exécuter des commandes depuis Python

introduction

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.

module de sous-processus

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.

Lorsqu'il est exécuté avec check_call

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

Lorsqu'il est exécuté par appel

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

Autres méthodes

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.

Recommended Posts

Exécuter des commandes depuis Python
Exécuter la commande depuis Python
[Python] Exécuter la commande unix (sous-processus)
Charger et exécuter la commande depuis yml avec python
Exécuter le script Python à partir du fichier de commandes
Exécuter du code Python à partir de l'interface graphique C #
sql à sql
MeCab de Python
Appeler des commandes depuis Python (édition Windows)
[Note] Exécuter du code Python à partir d'Excel (xlwings)
Utilisez Thingsspeak de Python
Touchez MySQL depuis Python 3
Exploitez Filemaker depuis Python
Utiliser fluentd de python
Accéder à bitcoind depuis python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Python depuis ou import
Exécuter automatiquement le fichier python
Utilisez MySQL depuis Python
Exécutez Python à partir d'Excel
Installer Python à partir de la source
Faites fonctionner le neutron de Python!
Utiliser MySQL depuis Python
[Node-RED] Exécuter Python sur l'environnement virtuel Anaconda à partir de Node-RED [Anaconda] [Python]
Faire fonctionner LXC depuis Python
Notes de commande de base Python
Manipuler riak depuis python
Forcer Python depuis Fortran
Utilisez BigQuery depuis Python.
[Python] Lire depuis Stdin
Utilisez mecab-ipadic-neologd de Python
Exécuter la fonction Python à partir de Powershell (comment passer des arguments)
Comment exécuter une commande à l'aide d'un sous-processus en Python
Aplatir à l'aide du rendement Python de
Appeler CPLEX depuis Python (DO cplex)
Deep Python appris de DEAP
Publier de Python vers Slack
Fonctionnalités de grammaire ajoutées à partir de Python3.6
Flirter de PHP à Python
Rendre MeCab disponible à partir de Python 3
Informations obtenues à partir de tweet_id (Python)
OCR à partir de PDF en Python
Exécutez le script illustrator à partir de python
Utiliser MySQL depuis Anaconda (python)
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Étude de Python Hour4: orientée objet ②
Interroger Athena depuis Lambda Python
Accéder à Oracle DB depuis Python
Étude de Python Hour3: Fonctions
Démarrer / arrêter GCE à partir de python
Arrêtez Omxplayer à partir du code Python
Exécutez la commande unix sur python
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Installez pyenv depuis Homebrew, installez Python depuis pyenv
Étude de Python Hour4: orientée objet ①
Convention de dénomination Python (à partir de PEP8)
Exécution de commandes externes en Python
Avec skype, notifiez avec skype de python!