ホームページ >バックエンド開発 >Golang >実行中に部分的なコマンド出力をリアルタイムでストリーミングするにはどうすればよいですか?

実行中に部分的なコマンド出力をリアルタイムでストリーミングするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-27 09:04:11830ブラウズ

How Can I Stream Partial Command Output in Real-Time During Execution?

コマンド出力の進行状況のストリーミング

コマンドを実行するプロセスでは、指定された出力場所と指定された出力場所の両方に出力をストリーミングする必要がよくあります。リアルタイムのログ ファイル。ただし、長時間のプロセスを処理する場合、cmd.StdoutPipe メソッドは最終結果を文字列としてのみ提供します。この記事では、コマンド実行プロセス中に部分出力のストリーミングを有効にする方法について詳しく説明します。

質問で提供されている例では、bufio.NewScanner を利用してパイプ経由で標準出力を読み取ります。よくある誤解は、一行ずつ読むものであるということです。実際には、bufio.ScanLines 関数で定義されているように、改行によって入力を読み取ります。実行されたコマンドで改行が生成されない場合、出力はすぐには返されません。

回避策:

この制限を克服するには、次の代替アプローチを検討してください。

  1. bufio.Split(bufio.ScanRunes):このメソッドでは、ルーン (文字) による読み取りが可能になり、新しいルーンが利用可能になるたびに出力が返されます。
  2. 手動バイト/ルーン読み取り: これには、バッファ配列を作成し、どちらかを繰り返し読み取る必要があります。完全なルーンを表す 1 バイトまたはバイト スライス。

子でのブロックの可能性を防ぐために、標準出力とエラーの両方を読み取ることが重要です。バッファがいっぱいのためプロセスが停止します。デフォルトでは、子プロセスの標準出力ストリームとエラー ストリームは破棄されます。ただし、標準エラー ストリームが読み取られない場合、欠落したエラー メッセージが発生する可能性があります。

以上が実行中に部分的なコマンド出力をリアルタイムでストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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