Comment bien gérer les commandes Linux à partir de Python

Il existe de nombreuses façons de gérer les commandes Linux à partir de Python, mais la meilleure façon est d'utiliser la classe Popen, qui peut gérer la sortie standard et la sortie d'erreur standard de manière structurelle.

Fonctions qui apparaissent

Nom de la fonction Classification Moule
Popen().stdout.readline() Sortie d'une seule ligne à partir du résultat de sortie standard str
Popen().stdout.readlines() Sortie standard Sortie de tous les résultats sous forme de tableau list[str]
Popen().stderr.readline() Sortie d'erreur standard Une seule ligne est sortie du résultat str
Popen().stderr.readlines() Sortie d'erreur standard Sortie de tous les résultats sous forme de tableau list[str]

Gérer la sortie standard et la sortie d'erreur standard de Python

output.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from subprocess import PIPE, Popen


def cmdline(command):
    """
Exécutez une commande. coquille=Si True, exécutez via le shell.
    :param command: str
    :return: Popen
    """
    return Popen(
        args=command,
        stdout=PIPE,
        stderr=PIPE,
        shell=True
    )


#Sortie standard
print 'Sortie standard:' + cmdline('date').stdout.readline()

#Sortie d'erreur standard
print 'Sortie d'erreur standard: ' + cmdline('echo 2015|xargs wc -l').stderr.readline()

Résultat d'exécution


>>> python output.py
Sortie standard:Lundi 7 décembre 2015 18:47:09 JST
Sortie d'erreur standard: wc: 2015: open: No such file or directory

Obtenez le dernier hachage de commit de git

git.py


#imprimer le dernier hachage de commit de git
print cmdline('git log --oneline').stdout.readline()

#Imprimer le dernier hachage de validation à partir d'un autre référentiel
print cmdline('cd ~/pypi/cf_recommender/ && git log --oneline').stdout.readline()

Résultat d'exécution


>>> python git.py
6a2ae0a xlsx update by automatic
a2febc4 update readme

Notification d'erreur avec chat en cas de sortie d'erreur standard

chat.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from subprocess import PIPE, Popen


def cmdline(command):
    """
Exécuter une commande
    :param command: str
    :return: Popen
    """
    return Popen(
        args=command,
        stdout=PIPE,
        stderr=PIPE,
        shell=True
    )


def chat(message):
    #Montage factice
    print 'ERROR:' + message


#Notifier le contenu de l'erreur par chat lorsque l'erreur standard est sortie
cmd = [
    'python manage.py test_json',
    'python manage.py test_battle',
]

#Préfixe d'exécution de la commande, &&Enchaîner plusieurs commandes avec
prefix = 'cd ~/application/ && {}'

for _cmd in cmd:
    command = prefix.format(_cmd)
    p = cmdline(command)
    print 'command:' + command

    #Notifier par chat quand une sortie d'erreur standard existe
    errors = p.stderr.readlines()
    if errors:
        error_message = ''.join(errors)
        chat(error_message)

Résultat d'exécution


command:cd ~/application/ && python manage.py test_json
ERROR:Traceback (most recent call last):
  File "manage.py", line 10, in <module>
  ...
IOError: [Errno 2] No such file or directory: u'..../test.json'

command:cd ~/application/ && python manage.py test_battle

Je suis sûr qu'il y a des gens qui connaissent des moyens plus pratiques (・ ㅂ ・) و

Recommended Posts

Comment bien gérer les commandes Linux à partir de Python
Comment accéder à wikipedia depuis python
Comment gérer le japonais avec Python
Comment mettre à jour Google Sheets à partir de Python
Comment accéder à RDS depuis Lambda (python)
Comment faire fonctionner Linux depuis la console
[Amazon Linux] Passage de la série Python 2 à la série Python 3
Comment ouvrir un navigateur Web à partir de python
Comment installer Python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Commandes Linux à retenir
Comment générer un objet Python à partir de JSON
[Introduction à Python] Comment gérer les données au format JSON
Comment faire fonctionner Linux depuis l'extérieur Procédure
[Python] Comment gérer les caractères japonais avec openCV
Comment gérer le type datetime dans sqlite3 de python
[Python] Comment supprimer les valeurs en double de la liste
Comment "mettre en cache" l'accès à la mémoire FPGA à partir de Linux
Comment récupérer des données d'image de Flickr avec Python
Débutants! Commandes et utilisation de base de Linux!
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Exécuter la fonction Python à partir de Powershell (comment passer des arguments)
Comment créer un environnement Python sur Amazon Linux 2
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Comment gérer JSON en Ruby, Python, JavaScript, PHP
Accès ODBC à SQL Server depuis Linux avec Python
Publier de Python vers Slack
Comment installer Python [Windows]
python3: Comment utiliser la bouteille (2)
Flirter de PHP à Python
Comment mettre à jour Tkinter de Python vers la version 8.6
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Passer de python2.7 à python3.6 (centos7)
Comment exécuter Notepad ++ Python
Connectez-vous à sqlite depuis python
Comment changer la version de Python
Comment développer en Python
Comment gérer les trames de données
[python] Comment juger scalaire
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment exécuter un programme Python à partir d'un script shell
Comment lancer AWS Batch à partir de l'application cliente Python
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
Comment échantillonner à partir de n'importe quelle fonction de densité de probabilité en Python
Comment exécuter des commandes et des scripts shell externes en python
Comment appeler Python ou Julia à partir de Ruby (implémentation expérimentale)
Appelez Matlab depuis Python pour optimiser