


Wie kann verhindert werden, dass Python beim Lesen der Ausgabe eines sich ständig aktualisierenden Prozesses einfriert?
Oct 28, 2024 am 08:44 AMDas Lesen der Prozessausgabe in Python stoppen, ohne zu hängen
Beim Versuch, die Ausgabe eines sich ständig aktualisierenden Prozesses in Python zu lesen, kann es zu Problemen beim Einfrieren kommen. Dieses Problem tritt insbesondere bei Verwendung der readlines()-Methode auf.
Problem: Einfrieren bei Verwendung von readlines()
Im bereitgestellten Code-Snippet ist der Prozess = os.popen("top"). Die Zeile readlines() führt dazu, dass das Programm hängen bleibt. Dies liegt daran, dass readlines() die gesamte Ausgabe des Unterprozesses auf einmal liest, was umfangreich sein und zu einem langen Blockierungsvorgang führen kann.
Die Verwendung von subprocess.Popen()
Ein besserer Ansatz ist um die Funktion subprocess.Popen() zu verwenden, um einen Unterprozess zu erstellen und seine Eingabe und Ausgabe zu verwalten. So können Sie es machen:
<code class="python">import subprocess process = subprocess.Popen('top') time.sleep(2) os.popen("killall top") print process</code>
Dieser Code verwendet Popen(), um einen Unterprozess zu erstellen, der oben ausgeführt wird. Nach einer Wartezeit von 2 Sekunden wird der oberste Prozess beendet und schließlich das Unterprozessobjekt gedruckt. Allerdings gibt dieser Ansatz immer noch ein unformatiertes Objekt zurück.
Lösung mit einer temporären Datei
Um die Ausgabe des Unterprozesses zu lesen, ohne das Programm zu blockieren, können Sie eine temporäre Datei zum Speichern der Ausgabe verwenden. Hier ist eine verbesserte Version des Codes:
<code class="python">#!/usr/bin/env python import subprocess import tempfile import time def main(): # Create a temporary file to store the subprocess output f = tempfile.TemporaryFile() # Start the subprocess and redirect its stdout to the temporary file process = subprocess.Popen(["top"], stdout=f) # Wait for a few seconds time.sleep(2) # Kill the subprocess process.terminate() process.wait() # Seek to the start of the temporary file and read the output f.seek(0) output = f.read() # Close the temporary file f.close() # Print the output of the subprocess print(output) if __name__=="__main__": main()</code>
Diese Lösung stellt sicher, dass das Programm beim Lesen der Ausgabe des Unterprozesses nicht hängen bleibt. Die Methode subprocess.wait() wartet auf die Beendigung des Unterprozesses und stellt so sicher, dass die gesamte Ausgabe in die Datei geschrieben wurde, bevor auf sie zugegriffen wird.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Python beim Lesen der Ausgabe eines sich ständig aktualisierenden Prozesses einfriert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

So herunterladen Sie Dateien in Python

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Intro zu Flask: Hinzufügen einer Kontaktseite Hinzufügen

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?
