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
потому что команда выходит со статусом ноль. Возможно, следует подать проблему с требованием, чтобы команда завершала работу с ненулевым статусом.