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

exec.Command does not register error from Go's own pprof tool

这是我的代码:

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 打印为空字符串,而 err 为 nil。这是怎么回事?

为了澄清,我正在分析 http://google.com 以故意制造错误。我通常会分析一个真正的 Go 应用程序。

正文

Fetching profile from http://google.com/profilez
Please wait... (30s)
server response: 404 Not Found 

写入标准错误。您的程序捕获空的标准输出。考虑致电:

out, err := cmd.CombinedOutput()

获取 stdout 和 stderr。

cmd.Output()cmd.CombinedOutput() return err == nil 因为命令以状态零退出。也许应该提出一个问题,要求命令以非零状态退出。