Тип exec.Error

Тип exec.Error представляет ошибки, возникающие при работе с внешними командами. Он используется в пакете os/exec для описания ситуаций, когда команда не может быть запущена или завершается с ошибкой. Тип содержит информацию о команде и причине ошибки.

Структура типа

gotype Error struct {
  Name string
  Err  error
}

Поле Name содержит имя команды, а поле Err содержит ошибку, которая произошла при её выполнении.

Метод Error

gofunc (e *Error) Error() string

Метод Error возвращает строковое представление ошибки, объединяя имя команды и описание ошибки в единое сообщение.

Пример использования

Давайте попробуем выполнить несуществующую команду и обработаем ошибку:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("unknown_command")
  err := cmd.Run()
  if err != nil {
    if execErr, ok := err.(*exec.Error); ok {
      fmt.Println("Command:", execErr.Name)
      fmt.Println("Error:", execErr.Err)
      fmt.Println("Full error:", execErr.Error())
    }
  }
}

Результат выполнения кода:

go"Command: unknown_command"
"Error: exec: \"unknown_command\": executable file not found in $PATH"
"Full error: exec: \"unknown_command\": executable file not found in $PATH"

Пример с неверным путем

Давайте попробуем выполнить команду с неверным путем к исполняемому файлу:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("/invalid/path/command")
  err := cmd.Run()
  if err != nil {
    if execErr, ok := err.(*exec.Error); ok {
      fmt.Println("Command:", execErr.Name)
      fmt.Println("Error:", execErr.Err)
    }
  }
}

Результат выполнения кода:

go"Command: /invalid/path/command"
"Error: exec: \"/invalid/path/command\": no such file or directory"

Пример с проверкой типа ошибки

Давайте обработаем ошибку выполнения команды с использованием проверки типа:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("ls", "-invalid-flag")
  err := cmd.Run()
  if err != nil {
    switch e := err.(type) {
    case *exec.Error:
      fmt.Println("Exec error:", e.Error())
    case *exec.ExitError:
      fmt.Println("Exit error:", e.Error())
    default:
      fmt.Println("Other error:", err)
    }
  }
}

Результат выполнения кода:

go"Exit error: exit status 1"

Смотрите также

  • тип exec.Cmd,
    который представляет выполняемую команду
  • тип exec.ExitError,
    который представляет ошибку завершения команды с ненулевым кодом
  • функцию exec.Command,
    которая создает команду для выполнения
  • функцию exec.LookPath,
    которая ищет исполняемый файл в системном пути