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!