Go で exec.Command() を使用してコマンドを実行する場合、1 つの出力をパイプします他の人にコマンドを送信するのは難しい場合があります。
次のことを考慮してください。例:
out, err := exec.Command("ps", "cax").Output() // Works and prints command output
ただし、ps の出力を grep にパイプしようとすると、コマンドは終了ステータス 1 で失敗します:
out, err := exec.Command("ps", "cax | grep myapp").Output() // Fails
この問題を解決するには、より慣用的なアプローチとして、各コマンドに exec.Command() を使用し、標準入出力を接続します。直接ストリーミングします。その方法は次のとおりです。
package main import ( "fmt" "os/exec" ) func main() { grep := exec.Command("grep", "redis") ps := exec.Command("ps", "cax") // Connect ps's stdout to grep's stdin. pipe, _ := ps.StdoutPipe() defer pipe.Close() grep.Stdin = pipe // Start ps first. ps.Start() // Run and get the output of grep. res, _ := grep.Output() fmt.Println(string(res)) }
これにより、複数のコマンドを実行し、必要に応じてその入力と出力をパイプできるようになり、コマンド チェーンを処理する柔軟な方法が提供されます。
以上がGo の `exec.Command()` でコマンド出力を適切にパイプする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。