Функция exec.Command
Функция exec.Command подготавливает команду для выполнения в операционной системе.
Она принимает имя исполняемого файла и его аргументы, возвращая указатель на структуру exec.Cmd.
Первый параметр - это имя команды или путь к исполняемому файлу, последующие параметры - это аргументы для команды.
Важно помнить, что функция только готовит команду, но не запускает её. Для фактического выполнения необходимо вызвать
один из методов структуры exec.Cmd, таких как Run, Output или CombinedOutput.
Синтаксис
exec.Command(name string, arg ...string) *exec.Cmd
Базовый пример
Давайте выполним команду echo с аргументом "Hello, World!" и выведем результат:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("echo", "Hello, World!")
output, err := cmd.Output()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(output))
}
Результат выполнения кода:
"Hello, World!\n"
Пример с несколькими аргументами
Давайте выполним команду ls с флагами -la для вывода содержимого текущей директории:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "-la")
output, err := cmd.Output()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(output))
}
Результат выполнения кода (зависит от содержимого директории):
"total 0\ndrwxr-xr-x ..."
Пример с обработкой ошибок
Давайте выполним несуществующую команду и обработаем ошибку:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("nonexistentcommand")
err := cmd.Run()
if err != nil {
fmt.Println("Error:", err)
}
}
Результат выполнения кода:
"Error: exec: \"nonexistentcommand\": executable file not found in $PATH"
Пример с использованием CombinedOutput
Давайте выполним команду, которая выводит данные как в stdout, так и в stderr, используя метод CombinedOutput:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("sh", "-c", "echo stdout && echo stderr >&2")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println(string(output))
}
Результат выполнения кода:
"stdout\nstderr\n"
Смотрите также
-
функцию
exec.CommandContext,
которая выполняет команду с контекстом и поддержкой отмены -
функцию
exec.LookPath,
которая проверяет, доступен ли исполняемый файл в системных путях -
метод
exec.Cmd.Run,
который запускает команду и ожидает её завершения -
метод
exec.Cmd.Output,
который выполняет команду и возвращает её стандартный вывод