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.
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())
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.
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!