Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich nicht blockierende Ausgaben von Unterprozessen in Python erfassen?

Wie kann ich nicht blockierende Ausgaben von Unterprozessen in Python erfassen?

Susan Sarandon
Freigeben: 2025-01-02 13:18:38
Original
750 Leute haben es durchsucht

How Can I Capture Non-Blocking Output from Subprocesses in Python?

Grundlegendes zur nicht blockierenden Ausgabeerfassung von Unterprozessen

In Python bietet das Unterprozessmodul eine leistungsstarke Möglichkeit, mit Systembefehlen zu interagieren. Wenn es sich jedoch um verrauschte Befehle handelt, die eine beträchtliche Ausgabemenge erzeugen, kann es schwierig sein, diese Ausgabe effizient zu erfassen und Zeile für Zeile anzuzeigen.

Ein gängiger Ansatz ist die Verwendung der for-Zeile in proc.stdout Iterator zum Lesen der Ausgabe des Unterprozesses. Wie die Frage jedoch hervorhebt, kann dieser Ansatz zu einer Pufferung führen, was zu einer verzögerten Anzeige der Ausgabe führt.

Nutzung von readline() für eine nicht blockierende Ausgabe

Um dieses Pufferungsproblem zu lösen, muss die Die Lösung liegt in der Verwendung der readline()-Methode des proc.stdout-Objekts. Mit dieser Methode können wir die Ausgabe des Unterprozesses Zeile für Zeile lesen, sobald sie verfügbar ist. Hier ist ein aktualisierter Codeausschnitt, der den readline()-Ansatz beinhaltet:

import subprocess

proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if not line:
        break
    # Perform filtering or other operations on the line as needed
    print("test:", line.rstrip())
Nach dem Login kopieren

In diesem modifizierten Skript treten wir in eine Endlosschleife ein, die wiederholt die Standardausgabe des Unterprozesses mit readline() liest. Solange eine Ausgabe verfügbar ist, wird die Schleife fortgesetzt und jede empfangene Zeile gedruckt. Dadurch wird sichergestellt, dass die Ausgabe nicht blockierend angezeigt wird und dem Benutzer Echtzeitaktualisierungen bereitgestellt werden.

Umgang mit der Unterprozesspufferung

Es ist wichtig zu beachten, dass die Lösung noch Raum für Potenzial lässt Abhängig von der Konfiguration des Unterprozesses kann es zu Pufferungsproblemen kommen. Wenn beispielsweise die Ausgabe des Unterprozesses stark gepuffert ist, kann eine gewisse Verzögerung dennoch unvermeidlich sein. Um dieses Problem zu beheben, kann es erforderlich sein, die Puffereinstellungen des Unterprozesses anzupassen oder zusätzliche Strategien anzuwenden, wie z. B. das manuelle Leeren des Ausgabepuffers.

Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Ausgaben von Unterprozessen in Python erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage