Как получить сообщение об ошибке из команды exec - PullRequest
0 голосов
/ 14 декабря 2018

Я использую Go для создания CLI.Я выполняю команду, и если из ОС выдается ошибка, я хочу напечатать ее.

cmd := exec.Command("abc", "run", pathToFile)
err := cmd.Start()
if err != nil {
    fmt.Printf("Error : %v \n", err)
    os.Exit(1)
}
err = cmd.Wait()
if err != nil {
    fmt.Printf("Error: %v \n", err)
    os.Exit(1)
}

Это дает только код состояния выхода

Error:  exit status 1 

Это недостаточно наглядно.

Когда я запускаю команду непосредственно в терминале, я отчетливо получаю сообщение об ошибке.

source does not exist 'test.exe'

Есть ли способ напечатать сообщение?

1 Ответ

0 голосов
/ 14 декабря 2018

StderrPipe возвращает канал, который будет подключен к стандартной ошибке команды при запуске команды.

cmd := exec.Command("abc", "run", pathToFile)
stderr, _ := cmd.StderrPipe()
if err := cmd.Start(); err != nil {
    log.Fatal(err)
}

scanner := bufio.NewScanner(stderr)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
...