РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1433 of 1593 menu

Тип exec.Cmd

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

Структура exec.Cmd не создается напрямую, а получается с помощью функции exec.Command или exec.CommandContext. Команда может быть выполнена синхронно с помощью метода Run или асинхронно с использованием методов Start и Wait.

Синтаксис

type Cmd struct { Path string Args []string Env []string Dir string Stdin io.Reader Stdout io.Writer Stderr io.Writer ExtraFiles []*os.File SysProcAttr *syscall.SysProcAttr Process *os.Process ProcessState *os.ProcessState // содержит скрытые поля }

Основные поля структуры:

  • Path — путь к исполняемому файлу
  • Args — аргументы командной строки
  • Env — переменные окружения
  • Dir — рабочий каталог
  • Stdin, Stdout, Stderr — потоки ввода/вывода

Пример

Давайте запустим простую команду echo с аргументом и выведем результат:

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"

Пример

Запустим команду с использованием контекста для ограничения времени выполнения:

package main import ( "context" "fmt" "os/exec" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() cmd := exec.CommandContext(ctx, "sleep", "5") err := cmd.Run() if err != nil { fmt.Println("Error:", err) } }

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

"Error: signal: killed"

Команда sleep была прервана по истечении таймаута в 2 секунды.

Пример

Запустим команду с передачей данных через стандартный ввод и чтением вывода:

package main import ( "bytes" "fmt" "os/exec" ) func main() { cmd := exec.Command("grep", "go") cmd.Stdin = bytes.NewBufferString("hello\ngo\nworld\n") var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() if err != nil { fmt.Println("Error:", err) return } fmt.Println(out.String()) }

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

"go\n"

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

  • функцию exec.Command,
    которая создает новый экземпляр Cmd
  • функцию exec.CommandContext,
    которая создает команду с поддержкой контекста
  • метод exec.Cmd.Run,
    который запускает команду и ожидает ее завершения
  • метод exec.Cmd.Output,
    который возвращает стандартный вывод команды
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить