我正嘗試將shell命令的Stdout流式傳輸到控制檯,但遇到了困難。Streaming exec.Command StdoutPipe
這是我目前有:
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')
}
我希望它可以打印出數字0至10,但它似乎掛在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/
假設你正在嘗試做比這更復雜的事情,但如果你真的只想複製命令的輸出到標準輸出,只需將os.Stdout分配給cmd.Stdout即可。 – Peter
我在做比這更復雜的事情,但我很欣賞提示!謝謝! – Joe