シェルコマンドのStdoutをコンソールにストリーミングしようとしていますが、問題があります。ストリーミングexec.Command StdoutPipe
ここで私が現在持っているものだ:私はこれが10までの数字0をプリントアウトすることを期待する
cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
fmt.Println(line)
line, err = reader.ReadString('\n')
}
が、ライン3(ReadString
の最初の呼び出し時にハングアップしているようだ
。 cmd.Output()
とcmd.CombinedOutput()
で始まっていますが、これらのメソッドはコマンドが完了するまで出力ストリーム全体をバッファリングしているようですが、出力が完了するまで待つのではなく、出力を処理する必要があります。
私もこれを試しました:continuously reading from exec.Cmd output、しかし、それは動作していないようだと私は本当に行を読んで、手動でバッファを管理する必要はないので、私はそれから離れました。私が見てきたを通じて
他のもの:
- https://groups.google.com/forum/#!topic/golang-nuts/0xK_IHbHPUU
- https://golang.org/pkg/os/exec/
- https://golang.org/pkg/bufio/
おそらくあなたはこれより複雑なことをしようとしていますが、本当にコマンドの出力をstdoutにコピーしたいのであれば、単にos.Stdoutをcmd.Stdoutに割り当ててください。 – Peter
私はそれより複雑なことをしていましたが、私はこのヒントを感謝します!ありがとう! – Joe