0

这是我的代码:

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

4

1 回答 1

2

文本

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

写入标准错误。您的程序捕获标准输出,它是空的。考虑调用:

out, err := cmd.CombinedOutput()

抓住标准输出和标准错误。

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

于 2015-07-02T03:13:40.113 回答