Задать вопрос
@binker338

Как через os/exec запустить сторонний exe файл в GoLang?

func start(path string) {
	cmd := exec.Command("start " + path)
	var buf bytes.Buffer
	cmd.Stdout = &buf
	err := cmd.Start()
	if err != nil {
		fmt.Printf("error: %v\n", err)
	}
	err = cmd.Wait()

	fmt.Printf("Command finished with error: %v\n", err)
	fmt.Printf("Command finished with output: %v\n", buf.String())
}
  • Вопрос задан
  • 1039 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
При использовании exec.Command, первым аргументом там всегда исполняемый файл, а дальше идет перечисление аргументов, которые этому исполняемому файлу будут передаваться. Причем, их не надо экранировать.

Несколько примеров:
path := `c:\Program files\some program\program.exe`
// аналогично вызову в консоли start "c:\Program files\some data"
cmd := exec.Command("start", path)
......

// аналогично вызову в консоли "c:\Program files\some program\program.exe"
cmd := exec.Command(path)
......

// аналогично вызову в консоли some_prog.exe -flag1 value1 -flag2 value2
cmd := exec.Command("some_prog.exe", "-flag1", "value1", "-flag2", "value2")
......


Обратите внимание, что все аргументы нужно посылать отдельными строками и не заключать их лишний раз в кавычки, как обычно мы в консоли привыкли. Потому что этапа парсинга команды тут нет, тут сразу посылается массив аргументов операционной системе напрямую.

Кстати, если вам просто нужен полный ответ команды stdout+stderr, можете использовать метод cmd.CombinedOutput(). Он выполнил программу, дождется ее завершения и вернет полностью то, что она писала в консоль.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы