Для запуска python-скрипта с таймаутом из Go можно использовать пакет os/exec
в сочетании с пакетом context
. Ниже приведен пример кода, который позволит вам достичь этой цели:
package main import ( "context" "fmt" "os/exec" "time" ) func main() { // Создаем контекст с таймаутом 5 секунд ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() // Создаем команду для запуска python-скрипта cmd := exec.CommandContext(ctx, "python", "path/to/your_script.py") // Создаем канал, чтобы получить результат выполнения команды result := make(chan error) // Запускаем команду в отдельной горутине go func() { result <- cmd.Run() }() // Ожидаем результат выполнения команды или истечения таймаута select { case err := <-result: // Если команда завершилась успешно, err будет равен nil // Если команда завершилась неуспешно, ошибка будет содержаться в err if err != nil { fmt.Println("Команда завершилась с ошибкой:", err) } case <-ctx.Done(): // Таймаут истек, прерываем выполнение команды cmd.Process.Kill() fmt.Println("Выполнение команды прервано из-за истечения таймаута") } }
В этом примере мы создаем контекст с таймаутом 5 секунд с помощью функции context.WithTimeout
. Затем мы создаем новую команду с помощью функции exec.CommandContext
, передавая в качестве параметров контекст и имя python-скрипта.
Затем мы создаем канал result
, чтобы получить результат выполнения команды. Запускаем выполнение команды в отдельной горутине с помощью анонимной функции. Далее, используя инструкцию select
, мы ожидаем либо результат выполнения команды, либо истечение таймаута. Если команда завершилась успешно, мы выводим сообщение об ошибке (если таковая имеется), а если истек таймаут, мы прерываем выполнение команды с помощью метода Kill
объекта cmd.Process
.
Надеюсь, эта информация помогла вам разобраться, как запустить python-скрипт с таймаутом из Go.