ホームページ >バックエンド開発 >Python チュートリアル >C プログラム出力を読み取るときに Python サブプロセスがハングするのはなぜですか?

C プログラム出力を読み取るときに Python サブプロセスがハングするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-17 19:20:02942ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。