3 回答

TA貢獻1828條經驗 獲得超3個贊
我相信,如果導入io
和os
與替換此:
//fmt.Println(out)
有了這個:
go io.Copy(os.Stdout, out)
(見文檔的io.Copy
和為os.Stdout
),它會做你想要什么。(免責聲明:未經測試。)
順便說一句,您可能還想通過使用與標準輸出相同的方法來捕獲標準錯誤,但是要使用cmd.StderrPipe
和os.Stderr
。

TA貢獻1966條經驗 獲得超4個贊
對于那些不需要循環使用但希望命令輸出回顯到終端而又不會cmd.Wait()阻塞其他語句的用戶:
package main
import (
"fmt"
"io"
"log"
"os"
"os/exec"
)
func checkError(err error) {
if err != nil {
log.Fatalf("Error: %s", err)
}
}
func main() {
// Replace `ls` (and its arguments) with something more interesting
cmd := exec.Command("ls", "-l")
// Create stdout, stderr streams of type io.Reader
stdout, err := cmd.StdoutPipe()
checkError(err)
stderr, err := cmd.StderrPipe()
checkError(err)
// Start command
err = cmd.Start()
checkError(err)
// Don't let main() exit before our command has finished running
defer cmd.Wait() // Doesn't block
// Non-blockingly echo command output to terminal
go io.Copy(os.Stdout, stdout)
go io.Copy(os.Stderr, stderr)
// I love Go's trivial concurrency :-D
fmt.Printf("Do other stuff here! No need to wait.\n\n")
}
- 3 回答
- 0 關注
- 401 瀏覽
添加回答
舉報