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 关注
- 329 浏览
添加回答
举报