Как запустить python-скрипт с таймаутом из Go?

Для запуска 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.