Bash-Befehl in Python ausführen

Muhammad Waiz Khan 30 Januar 2023
  1. Ausführen von Bash-Befehlen in Python mit der Methode run() des Moduls subprocess
  2. Ausführen von Bash-Befehlen in Python mit der Methode Popen() des Moduls subprocess
Bash-Befehl in Python ausführen

In diesem Tutorial werden verschiedene Möglichkeiten zur Ausführung von Bash-Befehlen in Python erläutert. Bash ist ein Shell- oder Befehlssprachinterpreter, der in Linux- und Unix-Betriebssystemen verwendet wird. Und der Bash-Befehl ist eine Anweisung eines Benutzers an das Betriebssystem, eine bestimmte Aufgabe auszuführen, wie der cd-Befehl, um das aktuelle Verzeichnis zu wechseln, der mkd-Befehl, um ein neues Verzeichnis anzulegen, und der ls-Befehl, um Dateien und Unterverzeichnisse in einem Verzeichnis aufzulisten, usw.

Ausführen von Bash-Befehlen in Python mit der Methode run() des Moduls subprocess

Die Methode run() des Moduls subprocess nimmt den übergebenen Befehl als String entgegen. Um die Ausgabe oder den Ausgabefehler des Befehls zu erhalten, sollten wir das Argument stdout und das Argument stderr auf PIPE setzen. Die Methode run gibt einen abgeschlossenen Prozess zurück, der stdout, stderr und returncode als Attribute enthält.

Der Beispielcode demonstriert, wie Sie die Methode run() verwenden, um einen Bash-Befehl in Python auszuführen.

from subprocess import PIPE

comp_process = subprocess.run("ls", stdout=PIPE, stderr=PIPE)
print(comp_process.stdout)

Ausführen von Bash-Befehlen in Python mit der Methode Popen() des Moduls subprocess

Die Methode Popen() des Moduls subprocess hat eine ähnliche Funktionalität wie die Methode run(), ist aber trickreicher in der Anwendung. Die Popen()-Methode gibt im Gegensatz zur run()-Methode kein fertiges Prozessobjekt als Ausgabe zurück, und der von der Popen()-Methode gestartete Prozess muss separat behandelt werden, was ihre Verwendung schwierig macht.

Anstelle des fertigen Prozesses gibt die Methode Popen() ein Prozessobjekt als Ausgabe zurück. Der zurückgegebene Prozess muss mit der Methode process.kill() oder process.terminate() beendet werden.

Wie bei der Methode run() müssen wir die Argumente stdout und stderr der Methode Popen() setzen, um die Ausgabe und den Fehler des Befehls zu erhalten. Und auf die Ausgabe und den Fehler kann über das zurückgegebene Prozessobjekt mit der Methode process.communicate zugegriffen werden.

Das folgende Codebeispiel zeigt, wie ein Bash-Befehl mit der Methode Popen() ausgeführt wird und wie die Werte von stdout und stderr abgerufen werden, um dann den Prozess in Python zu beenden:

from subprocess import PIPE

process = subprocess.Popen("ls", stdout=PIPE, stderr=PIPE)
output, error = process.communicate()
print(output)
process.kill