ホームページ >バックエンド開発 >Golang >Go で exec.Command を使用してパイプから読み取ることができません

Go で exec.Command を使用してパイプから読み取ることができません

王林
王林転載
2024-02-06 08:18:041033ブラウズ

无法在 Go 中使用 exec.Command 从 Pipe 读取

質問内容

私は、stdin 経由で別のプログラムにデータを送信し、stdout 経由で応答を読み取る go プログラムを作成しています。

これは、一種の「エコー サーバー」として機能するスクリプトです:

リーリー

Go でプログラムと通信しようとすると、buf.ReadLine() でハングします。これは私の Go コードです:

リーリー

Write() 関数はエラーを返しません。ただし、ReadLine() を実行しようとすると、プログラムがハングします。私が何を間違えたのでしょうか?


正解


これは Go コードの問題ではありません。Python プログラムは、stdout がターミナルではなくパイプであるため、出力をバッファリングしています。 Go readable には何の問題もありませんが、両方のプロセスが入力を待機し、どちらのプロセスも出力を生成しない状態でデッドロックが発生します。

Python でこれを処理する方法については、印刷関数をフラッシュする方法 または 出力バッファリングを無効にする を参照してください。最初の方法は単一の print ステートメントに適用され、2 つ目はプログラム全体に適用されます。単純な例では、それらはすべて同じですが、他の場合では異なる可能性があるため、オプションを知っておく価値があります。

以上がGo で exec.Command を使用してパイプから読み取ることができませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。