Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich in Python Unterprozessausgaben gleichzeitig in das Terminal und in Dateien schreiben?

Wie kann ich in Python Unterprozessausgaben gleichzeitig in das Terminal und in Dateien schreiben?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 22:58:30739Durchsuche

How Can I Write Subprocess Output to Both the Terminal and Files Simultaneously in Python?

Prozessausgabe gleichzeitig mit Pythons Unterprozess in Terminal und Dateien schreiben

Beim Ausführen mehrerer ausführbarer Dateien mit subprocess.call() ist es wünschenswert, dies zu haben Die Ausgabe wird sowohl im Terminal als auch in einer bestimmten Datei angezeigt. Das Standardverhalten erlaubt jedoch nur die Ausgabeumleitung entweder zur Datei oder zum Terminal.

Um diese Einschränkung zu überwinden, sollten Sie Popen direkt in Verbindung mit dem Argument stdout=PIPE verwenden. Dadurch können Sie die Ausgabe aus dem stdout-Attribut des Popen-Objekts lesen.

Um das gewünschte Verhalten zu erreichen, führen Sie die folgenden Schritte aus:

  • Erstellen Sie ein tee() Funktion: Diese Funktion erzeugt einen Thread, um Eingaben von einer Datei an mehrere Ausgabedateien weiterzuleiten.
  • Implementieren Sie eine teed_call()-Funktion: Diese Funktion emuliert subprocess.call(), akzeptiert aber zusätzliche stdout- und stderr-Dateiargumente. Es verwendet tee(), um die Ausgabe sowohl in Dateien als auch in das Terminal zu schreiben.

Hier ist ein Beispiel für die Verwendung dieser Funktionen:

<code class="python">import sys
from subprocess import Popen, PIPE
from threading import Thread

def tee(infile, *files):
    ...

def teed_call(cmd_args, **kwargs):
    ...

outf, errf = open("out.txt", "wb"), open("err.txt", "wb")
assert not teed_call(["cat", __file__], stdout=None, stderr=errf)
assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0)
assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)</code>

Dieser Code schreibt die Ausgabe effektiv in beide die Dateien und das Terminal gleichzeitig für jeden ausgeführten Befehl.

Das obige ist der detaillierte Inhalt vonWie kann ich in Python Unterprozessausgaben gleichzeitig in das Terminal und in Dateien schreiben?. 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