Метод exec.Cmd.Output

Метод exec.Cmd.Output выполняет команду, которую представляет объект exec.Cmd, и возвращает ее стандартный вывод в виде среза байтов ([]byte). При этом метод ожидает завершения команды и возвращает ошибку, если выполнение завершилось неудачно. Важно: метод также собирает вывод команды в буфер и делает его доступным для чтения, но не возвращает данные, записанные в стандартный поток ошибок.

Синтаксис

gocmd.Output()

Метод не принимает аргументов. Он возвращает два значения: срез байтов ([]byte) с содержимым стандартного вывода и ошибку (error). Если команда завершилась с ненулевым кодом возврата, ошибка будет типа *exec.ExitError.

Пример

Давайте выполним команду echo с аргументом "Hello, World!" и получим ее вывод:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("echo", "Hello, World!")
  out, err := cmd.Output()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("%q", out)
}

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

go"Hello, World!\n"

Пример

Выполним команду ls для просмотра содержимого текущей директории и выведем результат:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("ls", "-l")
  out, err := cmd.Output()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("%s", out)
}

Результат выполнения кода (зависит от содержимого директории):

go"total 0\n-rw-r--r-- 1 user user 0 Mar 10 10:00 file.txt\n"

Пример

Если команда завершается с ошибкой, метод вернет ошибку. Давайте вызовем несуществующую команду:

gopackage main

import (
  "fmt"
  "os/exec"
)

func main() {
  cmd := exec.Command("nonexistent-command")
  out, err := cmd.Output()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("%q", out)
}

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

go"Error: exec: \"nonexistent-command\": executable file not found in $PATH"

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

  • метод exec.Cmd.Run,
    который выполняет команду без возврата вывода
  • метод exec.Cmd.CombinedOutput,
    который возвращает объединенный вывод stdout и stderr
  • функцию exec.Command,
    которая создает объект команды
  • метод exec.Cmd.StdoutPipe,
    который возвращает канал для чтения вывода в реальном времени