这是我的代码:
cmd := exec.Command("go", "tool", "pprof", "-dot", "-lines", "http://google.com")
out, err := cmd.Output()
if err != nil {
panic(err)
}
println(string(out))
当我在控制台中运行完全相同的命令时,我看到:
$ go tool pprof -dot -lines http://google.com
Fetching profile from http://google.com/profilez
Please wait... (30s)
server response: 404 Not Found
但是,我的go程序没有注册这是一个错误。奇怪的是,变量out打印为空字符串,错误为零。发生了什么事?
为了澄清,我正在分析http://google.com以故意创建错误。我通常会介绍一个真正的Go应用程序。
答案 0 :(得分:2)
文字
Fetching profile from http://google.com/profilez
Please wait... (30s)
server response: 404 Not Found
写入stderr。你的程序捕获stdout,它是空的。考虑致电:
out, err := cmd.CombinedOutput()
抓住stdout和stderr。
cmd.Output()
和cmd.CombinedOutput()
返回err == nil
因为命令以状态为零退出。也许应该提出一个问题,要求命令以非零状态退出。