exec.Command не регистрирует ошибку из собственного инструмента pprof Go

Вот мой код:

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.

1 ответ

Решение

Текст

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

написано в stderr. Ваша программа захватывает стандартный вывод, который пуст. Рассмотреть вопрос о звонке:

out, err := cmd.CombinedOutput()

захватить как stdout, так и stderr.

cmd.Output() а также cmd.CombinedOutput() вернуть err == nil потому что команда выходит со статусом ноль. Возможно, следует подать проблему с требованием, чтобы команда завершала работу с ненулевым статусом.

Другие вопросы по тегам