Python C プログラムのサブプロセスが ""for line in iter"" でハングします
次を使用して C プログラムから出力を読み取ろうとしています。 Python で subprocess.Popen を実行しましたが、プロセスが「for line in iter(process.stdout.readline, '')」の行でハングしています。これはサブプロセスの既知の問題であり、stdout ストリームのバッファリングが原因で発生します。
C プログラムの stdout バッファを直接修正してください
stdout ストリームは次によってバッファリングされます。デフォルト。これは、バッファがいっぱいになるまで、C プログラムはパイプに出力を送信しないことを意味します。これを修正するには、setvbuf 関数を使用して、stdout ストリームをライン バッファリングに設定します。これにより、C プログラムは各行が書き込まれた直後に出力をパイプに送信します。
または擬似 TTY を使用します
別のオプションは、擬似 TTY を使用することです。 C プログラムと通信するための TTY (端末デバイス)。これにより、標準出力ストリームがバッファリングされている場合でも、C プログラムはすぐに出力をパイプに送信できるようになります。
または、C プログラムのソースを変更せずに修正できます
最後に、stdbuf ユーティリティを使用すると、C プログラムのソース コードを変更せずにバッファリング タイプを変更できます。このユーティリティを使用すると、標準出力ストリームがバッファリングされている場合でも、C プログラムに出力を直ちにパイプに送信させることができます。
以上がC プログラム出力を読み取るときに Python サブプロセスがハングするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。