Heim  >  Artikel  >  Backend-Entwicklung  >  Warum bleibt mein Python-Unterprozess beim Lesen der C-Programmausgabe hängen?

Warum bleibt mein Python-Unterprozess beim Lesen der C-Programmausgabe hängen?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 19:20:02879Durchsuche

Why Does My Python Subprocess Hang When Reading C Program Output?

Python C-Programm-Unterprozess hängt bei „for line in iter““

Sie versuchen, die Ausgabe eines C-Programms mit zu lesen subprocess.Popen in Python, aber der Prozess hängt an der Zeile „for line in iter(process.stdout.readline, '')“. Dies ist ein bekanntes Problem mit Unterprozessen und wird durch die Pufferung des Stdout-Streams verursacht.

Standardout-Puffer direkt im C-Programm reparieren

Der Stdout-Stream wird gepuffert von Standard. Das bedeutet, dass das C-Programm keine Ausgabe an die Pipe sendet, bis der Puffer voll ist. Um dies zu beheben, können Sie die Funktion setvbuf verwenden, um den Standardausgabe-Stream auf zeilengepuffert einzustellen. Dies führt dazu, dass das C-Programm unmittelbar nach dem Schreiben jeder Zeile eine Ausgabe an die Pipe sendet.

Oder verwenden Sie Pseudo-TTY

Eine andere Möglichkeit besteht darin, ein Pseudo-TTY zu verwenden. TTY (Endgerät) zur Kommunikation mit dem C-Programm. Dadurch kann das C-Programm die Ausgabe sofort an die Pipe senden, auch wenn der Standardausgabestrom gepuffert ist.

Oder beheben Sie das Problem, ohne die Quelle des C-Programms zu ändern

Schließlich können Sie mit dem Dienstprogramm stdbuf den Puffertyp ändern, ohne den Quellcode des C-Programms zu ändern. Mit diesem Dienstprogramm können Sie das C-Programm zwingen, die Ausgabe sofort an die Pipe zu senden, selbst wenn der Standardausgabestrom gepuffert ist.

Das obige ist der detaillierte Inhalt vonWarum bleibt mein Python-Unterprozess beim Lesen der C-Programmausgabe hängen?. 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