Метод exec.Cmd.Output
Метод exec.Cmd.Output выполняет команду, которую представляет
объект exec.Cmd, и возвращает ее стандартный вывод в виде
среза байтов ([]byte). При этом метод ожидает завершения
команды и возвращает ошибку, если выполнение завершилось неудачно.
Важно: метод также собирает вывод команды в буфер и делает его доступным
для чтения, но не возвращает данные, записанные в стандартный поток
ошибок.
Синтаксис
cmd.Output()
Метод не принимает аргументов. Он возвращает два значения:
срез байтов ([]byte) с содержимым стандартного вывода
и ошибку (error). Если команда завершилась с ненулевым
кодом возврата, ошибка будет типа *exec.ExitError.
Пример
Давайте выполним команду echo с аргументом "Hello, World!"
и получим ее вывод:
package 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)
}
Результат выполнения кода:
"Hello, World!\n"
Пример
Выполним команду ls для просмотра содержимого текущей директории
и выведем результат:
package 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)
}
Результат выполнения кода (зависит от содержимого директории):
"total 0\n-rw-r--r-- 1 user user 0 Mar 10 10:00 file.txt\n"
Пример
Если команда завершается с ошибкой, метод вернет ошибку. Давайте вызовем несуществующую команду:
package 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)
}
Результат выполнения кода:
"Error: exec: \"nonexistent-command\": executable file not found in $PATH"
Смотрите также
-
метод
exec.Cmd.Run,
который выполняет команду без возврата вывода -
метод
exec.Cmd.CombinedOutput,
который возвращает объединенный вывод stdout и stderr -
функцию
exec.Command,
которая создает объект команды -
метод
exec.Cmd.StdoutPipe,
который возвращает канал для чтения вывода в реальном времени