Wie man gut mit Linux-Befehlen aus Python umgeht

Es gibt viele Möglichkeiten, Linux-Befehle aus Python zu verarbeiten. Am besten verwenden Sie jedoch die Popen-Klasse, die die Standardausgabe und die Standardfehlerausgabe strukturell verarbeiten kann.

Funktionen, die angezeigt werden

Funktionsname Einstufung Schimmel
Popen().stdout.readline() Standardausgabe Vom Ergebnis wird nur eine Zeile ausgegeben str
Popen().stdout.readlines() Standardausgabe Alle Ergebnisse als Array ausgeben list[str]
Popen().stderr.readline() Standardfehlerausgabe Vom Ergebnis wird nur eine Zeile ausgegeben str
Popen().stderr.readlines() Standardfehlerausgabe Alle Ergebnisse als Array ausgeben list[str]

Behandeln Sie die Standardausgabe und die Standardfehlerausgabe von Python

output.py


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


def cmdline(command):
    """
Führen Sie einen Befehl aus. Schale=Wenn True, führen Sie die Shell aus.
    :param command: str
    :return: Popen
    """
    return Popen(
        args=command,
        stdout=PIPE,
        stderr=PIPE,
        shell=True
    )


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

#Standardfehlerausgabe
print 'Standardfehlerausgabe: ' + cmdline('echo 2015|xargs wc -l').stderr.readline()

Ausführungsergebnis


>>> python output.py
Standardausgabe:Montag, 7. Dezember 2015, 18:47:09 Uhr JST
Standardfehlerausgabe: wc: 2015: open: No such file or directory

Holen Sie sich den neuesten Commit-Hash von Git

git.py


#Drucken Sie den neuesten Commit-Hash von Git
print cmdline('git log --oneline').stdout.readline()

#Drucken Sie den neuesten Commit-Hash aus einem anderen Repository
print cmdline('cd ~/pypi/cf_recommender/ && git log --oneline').stdout.readline()

Ausführungsergebnis


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

Fehlerbenachrichtigung mit Chat, wenn Standardfehlerausgabe vorhanden ist

chat.py


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


def cmdline(command):
    """
Führen Sie einen Befehl aus
    :param command: str
    :return: Popen
    """
    return Popen(
        args=command,
        stdout=PIPE,
        stderr=PIPE,
        shell=True
    )


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


#Benachrichtigen Sie den Fehlerinhalt per Chat, wenn ein Standardfehler ausgegeben wird
cmd = [
    'python manage.py test_json',
    'python manage.py test_battle',
]

#Befehlsausführungspräfix, &&Verketten Sie mehrere Befehle mit
prefix = 'cd ~/application/ && {}'

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

    #Benachrichtigen Sie per Chat, wenn eine Standardfehlerausgabe vorhanden ist
    errors = p.stderr.readlines()
    if errors:
        error_message = ''.join(errors)
        chat(error_message)

Ausführungsergebnis


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

Ich bin sicher, es gibt Leute, die bequemere Wege kennen (・ ㅂ ・) و

Recommended Posts

Wie man gut mit Linux-Befehlen aus Python umgeht
So greifen Sie über Python auf Wikipedia zu
Umgang mit Japanisch mit Python
So aktualisieren Sie Google Sheets von Python
Zugriff auf RDS von Lambda (Python)
So bedienen Sie Linux von der Konsole aus
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
So öffnen Sie einen Webbrowser über Python
So installieren Sie Python
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Linux-Befehle zum Erinnern
So generieren Sie ein Python-Objekt aus JSON
[Einführung in Python] Umgang mit Daten im JSON-Format
So bedienen Sie Linux von außen Vorgehensweise
[Python] Umgang mit japanischen Zeichen mit openCV
Wie man mit dem Datum / Uhrzeit-Typ in Pythons SQLite3 umgeht
[Python] So entfernen Sie doppelte Werte aus der Liste
So "cache-fähiger" Zugriff auf FPGA-Speicher von Linux
So kratzen Sie Bilddaten von Flickr mit Python
Anfänger! Grundlegende Linux-Befehle und Verwendung!
So laden Sie Dateien von Selenium of Python in Chrome herunter
Führen Sie die Python-Funktion von Powershell aus (wie Sie Argumente übergeben).
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
Umgang mit JSON in Ruby, Python, JavaScript, PHP
ODBC-Zugriff auf SQL Server von Linux mit Python
Post von Python nach Slack
So installieren Sie Python [Windows]
python3: Verwendung der Flasche (2)
Flirte von PHP nach Python
So aktualisieren Sie Pythons Tkinter auf 8.6
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
So führen Sie Notepad ++ Python aus
Stellen Sie von Python aus eine Verbindung zu SQLite her
So ändern Sie die Python-Version
Wie man in Python entwickelt
Umgang mit Datenrahmen
[Python] Wie man Skalar beurteilt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So führen Sie ein Python-Programm in einem Shell-Skript aus
So starten Sie AWS Batch über die Python-Client-App
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
Ausführen externer Shell-Skripte und -Befehle in Python
Wie man Python oder Julia von Ruby aus aufruft (experimentelle Implementierung)
Rufen Sie Matlab von Python zur Optimierung auf