So führen Sie externe Befehle in Python aus

Python subprocess

Ausführen von Systembefehlen aus Python

Python bietet leistungsstarke Funktionen zum Ausführen externer Programme und Systembefehle direkt aus Ihren Skripten. Mit dieser Funktion können Sie die Einfachheit von Python nutzen und gleichzeitig die große Auswahl an Tools nutzen, die in Ihrem Betriebssystem verfügbar sind.

Ganz gleich, ob Sie sich wiederholende Aufgaben automatisieren oder komplexe Arbeitsabläufe integrieren: Wenn Sie wissen, wie Systembefehle in Python aufgerufen werden, können Sie Ihre Produktivität erheblich steigern. In diesem Leitfaden untersuchen wir verschiedene Methoden, um dies effektiv zu erreichen.

Befehl Beschreibung
subprocess.run Führt einen Befehl in einer Subshell aus. Kann Ausgaben und Fehler erfassen.
subprocess.run([...], capture_output=True) Erfasst die Standardausgabe und den Standardfehler des ausgeführten Befehls.
subprocess.run([...], shell=True) Führt den Befehl über die Shell aus und ermöglicht Shell-Funktionen wie Platzhalter.
subprocess.Popen Führt einen Befehl in einem neuen Prozess aus und bietet so mehr Kontrolle über seine Ausführung.
process.stdout.readline() Liest eine Ausgabezeile aus der Standardausgabe des Prozesses.
os.system Führt einen Befehl in einer Subshell aus, die häufig für die einfache Befehlsausführung verwendet wird.
subprocess.check_output Führt einen Befehl aus und gibt seine Ausgabe zurück. Löst eine Ausnahme aus, wenn der Befehl fehlschlägt.
os.environ.copy() Erstellt eine Kopie der aktuellen Umgebungsvariablen und ermöglicht Änderungen.
env parameter in subprocess.run Gibt Umgebungsvariablen für den neuen Prozess an.

Skriptausführung in Python verstehen

Die bereitgestellten Skripte demonstrieren verschiedene Möglichkeiten, externe Befehle mit Python auszuführen. Der Der Befehl ist vielseitig und ermöglicht es Ihnen, Shell-Befehle direkt aus Ihrem Python-Skript auszuführen. Zum Beispiel, gibt eine Nachricht an die Konsole aus, while erfasst die Ausgabe des ls -l Befehl, der eine detaillierte Verzeichnisliste anzeigt. Benutzen mit ermöglicht die Verwendung von Shell-Funktionen wie der Platzhaltererweiterung und ist somit praktisch für komplexere Befehle.

Der Der Befehl bietet mehr Kontrolle über die Befehlsausführung, indem er die asynchrone Befehlsausführung und Interaktion mit den Eingabe- und Ausgabeströmen des Prozesses ermöglicht. Zum Beispiel das Skriptbeispiel mit Pingt kontinuierlich den lokalen Computer an und liest jede Ausgabezeile. Zusätzlich, wird für die einfache Befehlsausführung verwendet, es fehlt jedoch die Flexibilität von subprocess. Umgebungsvariablen können mit geändert und an den Unterprozess übergeben werden und das Parameter in , was eine dynamische Befehlsausführung basierend auf der Umgebung ermöglicht.

Externe Befehle in Python ausführen

Verwendung des Unterprozessmoduls von Python

import subprocess
# Example 1: Running a simple shell command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

Systemaufgaben mit Python automatisieren

Verwendung von os.system- und Subprozessmodulen

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('An error occurred:', e.output.decode())

Erweiterte Techniken zur Systembefehlsausführung

Ein weiterer Aspekt der Ausführung von Systembefehlen in Python ist die Verwendung von Modul zum Parsen von Shell-Befehlen. Dieses Modul bietet eine Möglichkeit, Shell-Befehle in ein Listenformat aufzuteilen, an das sie dann übergeben werden können Funktionen. Dadurch wird sichergestellt, dass Argumente mit Leerzeichen korrekt behandelt werden. Darüber hinaus können Sie die verwenden um die standardmäßigen Eingabe-, Ausgabe- und Fehlerströme an den übergeordneten Prozess zu leiten und so eine komplexere Kommunikation zwischen Prozessen zu ermöglichen.

Beispielsweise kann die Verkettung von Befehlen und die sequentielle Verarbeitung ihrer Ausgabe erreicht werden, indem die Ausgabe eines Befehls mithilfe von Pipes an einen anderen weitergeleitet wird . Auf diese Weise können Sie leistungsstarke Befehlssequenzen erstellen, ähnlich wie Sie es in einem Shell-Skript tun würden. Sie können auch verwenden um mehrere Unterprozessbefehle gleichzeitig auszuführen und so die Effizienz Ihres Skripts zu steigern, insbesondere bei der Bearbeitung von I/O-gebundenen Aufgaben.

  1. Wie kann ich einen Shell-Befehl ausführen und seine Ausgabe in Python erhalten?
  2. Verwenden mit um die Ausgabe des Befehls zu erfassen.
  3. Was ist der Unterschied zwischen Und ?
  4. ist eine einfachere Schnittstelle, die darauf wartet, dass der Befehl abgeschlossen wird Bietet mehr Kontrolle über die Befehlsausführung und ermöglicht einen asynchronen Betrieb.
  5. Wie gehe ich mit Fehlern um, wenn ich einen Systembefehl ausführe?
  6. Verwenden Und Blöcke mit Fehler zu erkennen und zu behandeln.
  7. Kann ich Umgebungsvariablen an einen Befehl übergeben?
  8. Ja, verwenden Sie die Parameter in oder Umgebungsvariablen übergeben.
  9. Wie führe ich mehrere Befehle nacheinander aus?
  10. Verwenden oder in einer Schleife oder verketten Sie Befehle mithilfe von Pipes mit .
  11. Wie kann ich einen Befehl ausführen, der eine Benutzereingabe erfordert?
  12. Verwenden mit und mit dem Prozess kommunizieren .
  13. Wozu benutzt man bei der Befehlsausführung?
  14. hilft dabei, Shell-Befehle korrekt zu analysieren und sicherzustellen, dass Argumente mit Leerzeichen ordnungsgemäß behandelt werden.
  15. Wie führe ich einen Befehl im Hintergrund aus?
  16. Verwenden ohne darauf warten zu müssen, dass der Vorgang abgeschlossen oder verwendet wird um die Hintergrundausführung zu verwalten.

Erweiterte Techniken zur Systembefehlsausführung

Ein weiterer Aspekt der Ausführung von Systembefehlen in Python ist die Verwendung von Modul zum Parsen von Shell-Befehlen. Dieses Modul bietet eine Möglichkeit, Shell-Befehle in ein Listenformat aufzuteilen, an das sie dann übergeben werden können Funktionen. Dadurch wird sichergestellt, dass Argumente mit Leerzeichen korrekt behandelt werden. Darüber hinaus können Sie die verwenden um die standardmäßigen Eingabe-, Ausgabe- und Fehlerströme an den übergeordneten Prozess zu leiten und so eine komplexere Kommunikation zwischen Prozessen zu ermöglichen.

Beispielsweise kann die Verkettung von Befehlen und die sequentielle Verarbeitung ihrer Ausgabe erreicht werden, indem die Ausgabe eines Befehls mithilfe von Pipes an einen anderen weitergeleitet wird . Auf diese Weise können Sie leistungsstarke Befehlssequenzen erstellen, ähnlich wie Sie es in einem Shell-Skript tun würden. Sie können auch verwenden um mehrere Unterprozessbefehle gleichzeitig auszuführen und so die Effizienz Ihres Skripts zu steigern, insbesondere bei der Bearbeitung von I/O-gebundenen Aufgaben.

Das Ausführen externer Befehle in Python ist eine vielseitige und leistungsstarke Funktion, die Ihre Skripterstellungs- und Automatisierungsaufgaben erheblich verbessern kann. Durch die Verwendung der Mit dem Modul können Sie Shell-Befehle ausführen, deren Ausgaben erfassen und Fehler effektiv behandeln. Der Die Funktion bietet eine einfachere Alternative für die grundlegende Befehlsausführung. Darüber hinaus ist die Einbeziehung der Das Modul stellt die ordnungsgemäße Analyse komplexer Shell-Befehle sicher. Wenn Sie diese Techniken verstehen, können Sie die Stärken von Python nutzen und gleichzeitig das volle Potenzial der Befehlszeilentools Ihres Betriebssystems nutzen.