Golang でコマンド出力をリアルタイムでログにリダイレクトする方法は?

Mary-Kate Olsen
リリース: 2024-11-12 13:38:02
オリジナル
657 人が閲覧しました

How to Redirect Command Output to a Log in Real-Time in Golang?

Golang へのログインへのコマンド出力のリダイレクト

exec.Command 関数を使用してコマンドを実行する場合、実際には出力をログにリダイレクトすることが望ましいことがよくあります。時間の監視。 CombinedOutput はコマンドの終了後に出力全体をキャプチャできますが、長時間実行されているプロセスや未完了のプロセスには適していません。

リアルタイム出力リダイレクトの一般的な解決策は、stdout と stderr をシステム出力ストリームに直接割り当てることです。 (os.Stdout および os.Stderr)。ただし、これは端末に書き込みを行わないアプリケーションでは現実的ではない可能性があります。

パイプを使用した解決策

コマンド出力をログにリダイレクトするには、パイプを利用できます。 。以下に例を示します。

stdout, err := cmd.StdoutPipe()
if err != nil {
    return nil, err
}

// Start the command with the pipe in place
if err := cmd.Start(); err != nil {
    return nil, err
}

// Real-time monitoring of stdout
in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text()) // Write line to log or perform other operations
}
if err := in.Err(); err != nil {
    log.Printf("Error: %s", err)
}
ログイン後にコピー

考慮事項

このメソッドは stdout を処理しますが、別のパイプと goroutine を作成して stderr を管理することもできます。さらに、適切なクリーンアップとリソース管理を確保するために、コンテキストのキャンセルやその他のエッジケースの処理が必要になる場合があります。

以上がGolang でコマンド出力をリアルタイムでログにリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート