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

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

王林
リリース: 2024-02-06 08:18:04
転載
1001 人が閲覧しました

无法在 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート