私は、stdin 経由で別のプログラムにデータを送信し、stdout 経由で応答を読み取る go プログラムを作成しています。
これは、一種の「エコー サーバー」として機能するスクリプトです:
リーリーGo でプログラムと通信しようとすると、buf.ReadLine()
でハングします。これは私の Go コードです:
Write()
関数はエラーを返しません。ただし、ReadLine()
を実行しようとすると、プログラムがハングします。私が何を間違えたのでしょうか?
これは Go コードの問題ではありません。Python プログラムは、stdout がターミナルではなくパイプであるため、出力をバッファリングしています。 Go readable には何の問題もありませんが、両方のプロセスが入力を待機し、どちらのプロセスも出力を生成しない状態でデッドロックが発生します。
Python でこれを処理する方法については、印刷関数をフラッシュする方法 または 出力バッファリングを無効にする を参照してください。最初の方法は単一の print ステートメントに適用され、2 つ目はプログラム全体に適用されます。単純な例では、それらはすべて同じですが、他の場合では異なる可能性があるため、オプションを知っておく価値があります。
以上がGo で exec.Command を使用してパイプから読み取ることができませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。