Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich in Python die Ausgabe eines Unterprozesses gleichzeitig in Dateien und Terminal umwandeln?

Wie kann ich in Python die Ausgabe eines Unterprozesses gleichzeitig in Dateien und Terminal umwandeln?

DDD
DDDOriginal
2024-11-03 21:46:31140Durchsuche

How to Tee Subprocess Output to Files and Terminal Simultaneously in Python?

Unterprozessausgabe gleichzeitig an Dateien und Terminal senden

Mit der Methode subprocess.call() von Python können Sie externe Befehle ausführen. Standardmäßig wird die Ausgabe jedoch an das Terminal weitergeleitet. In diesem Artikel geht es um die Frage, wie die Ausgabe gleichzeitig in beide Dateien und das Terminal geschrieben werden kann.

Die Antwort liegt in der direkten Verwendung der Funktion Popen(), die eine bessere Kontrolle über den Ausführungsprozess bietet. Durch Angabe von stdout=PIPE können Sie aus dem stdout-Stream des Prozesses lesen. Um das gewünschte Verhalten zu erreichen, befolgen Sie diese Schritte:

  1. Erstellen Sie eine Tee-Funktion: Definieren Sie eine Funktion, die aus einer Eingabedatei liest und sie in mehrere Ausgabedateien schreibt. Diese Funktion wird in einem separaten Thread ausgeführt und stellt so sicher, dass der Hauptprozess nicht blockiert wird.
  2. Verwenden Sie die Tee-Funktion in der Teed_Call-Funktion: Erstellen Sie eine Wrapper-Funktion namens teed_call(), die Popen() mit aufruft stdout=PIPE und stderr=PIPE. Es verwendet die Funktion tee(), um die Streams stdout und stderr in beide Dateien und das Terminal zu schreiben.
  3. Befehle mit Teeing ausführen: Rufen Sie teed_call() mit den gewünschten Befehlsargumenten auf und geben Sie die an Geben Sie Dateien mit den Parametern stdout und stderr aus.
  4. Warten Sie auf den Abschluss der Ausgabe: Treten Sie nach der Ausführung des Befehls dem von der Funktion tee() erstellten Thread bei, um sicherzustellen, dass die gesamte Ausgabe geschrieben wird, bevor Sie fortfahren .

Das in der Antwort bereitgestellte Codebeispiel zeigt, wie die Funktion „teed_call()“ verwendet wird, um die stdout- und stderr-Streams verschiedener Befehle, einschließlich cat, echo und gcc, zu laden.

Das obige ist der detaillierte Inhalt vonWie kann ich in Python die Ausgabe eines Unterprozesses gleichzeitig in Dateien und Terminal umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn