exec.Command没有注册Go自己的pprof工具中的错误

时间:2015-07-02 03:03:35

标签: go pprof

这是我的代码:

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应用程序。

1 个答案:

答案 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因为命令以状态为零退出。也许应该提出一个问题,要求命令以非零状态退出。