Python Systembefehl – os.system() und subprocess.call()
Beim Programmieren in Python müssen Sie möglicherweise einige Shell-Befehle für Ihr Programm ausführen. Wenn Sie beispielsweise die Pycharm IDE verwenden, bemerken Sie vielleicht, dass es eine Option gibt, Ihr Projekt auf Github zu teilen. Und Sie wissen wahrscheinlich, dass die Dateiübertragung mit Git erfolgt, das über die Befehlszeile bedient wird. Pycharm führt also einige Shell-Befehle im Hintergrund aus, um dies zu tun. In diesem Tutorial werden wir jedoch einige Grundlagen über das Ausführen von Shell-Befehlen aus Ihrem Python-Code lernen.
Python os.system() Funktion
Wir können Systembefehle mit der Funktion os.system() ausführen. Laut dem offiziellen Dokument wurde gesagt, dass
dies durch Aufrufen der Standard-C-Funktion system() implementiert wird und die gleichen Einschränkungen hat.
Erzeugt der Befehl jedoch einen Output, wird dieser an den Standard-Output-Stream des Interpreters gesendet. Die Verwendung dieses Befehls wird nicht empfohlen. Im folgenden Code werden wir versuchen, die Version von Git mit dem Systembefehl git –version zu ermitteln.
import os
cmd = "git --version"
returned_value = os.system(cmd) # returns the exit code in unix
print('returned value:', returned_value)
Der folgende Output wurde in Ubuntu 16.04 gefunden, wo Git bereits installiert ist.
git version 2.14.2
returned value: 0
Beachten Sie, dass wir den Output des Git-Version-Befehls nicht auf die Konsole drucken, er wird gedruckt, weil die Konsole hier der Standard-Output-Stream ist.
Python subprocess.call() Funktion
Im vorherigen Abschnitt haben wir gesehen, dass die Funktion os.system() gut funktioniert. Aber es ist nicht der empfohlene Weg, Shell-Befehle auszuführen. Wir werden das Python-Subprocess-Modul verwenden, um Systembefehle auszuführen. Wir können Shell-Befehle mit der Funktion subprocess.call() ausführen. Siehe den folgenden Code, der dem vorherigen Code entspricht.
import subprocess
cmd = "git --version"
returned_value = subprocess.call(cmd, shell=True) # returns the exit code in unix
print('returned value:', returned_value)
Python subprocess.check_output() Funktion
Bisher haben wir die Systembefehle mit Hilfe von Python ausgeführt. Aber wir konnten den von diesen Befehlen produzierten Output nicht manipulieren. Mit der Funktion subprocess.check_output() können wir den Output in einer Variablen speichern.
import subprocess
cmd = "date"
# returns output as byte string
returned_output = subprocess.check_output(cmd)
# using decode() function to convert byte string to string
print('Current date is:', returned_output.decode("utf-8"))
Es wird einen Output wie den folgenden erzeugen
Current date is: Thu Oct 5 16:31:41 IST 2017
Also, in den obigen Abschnitten haben wir über grundlegende Ideen zum Ausführen von os.system() und subprocess.call() gesprochen. Aber es gibt keine Grenzen im Lernen für einen Command.