@wintreist

Как запустить скрипт используя subprocess и venv из которого запущен главный скрипт?

Хочу запустить скрипт из другого скрипта используя тот же интерпретатор, которым запущен основной скрипт.
sctipt = subprocess.run(['python', 'my_script.py', '--work-dir', work_dir, '--result-dir', result_dir])

но этот код запускает стандартный питоновский интерпретатор, в котором нет установленных библиотек под мой скрипт.
Как я понимаю, нужно сначала запустить venv, а потом сам скрипт друг за другом, но я не знаю как это сделать?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Найди бинарник python, который лежит в этом venv, и укажи его полный путь вместо просто python.
Но так как ты дожидаешься завевршения скрипта, может иметь смысл такой хак:
# my_script.py
import sys

def main(args: list[str]):
    """Тело скрипта здесь..."""

if __name__ == '__main__':
    # скрипт запущен независимо
    main(sys.argv[1:])

А в главном скрипте будет просто
import my_script

my_script.main(['--work-dir', work_dir, '--result-dir', result_dir])


В этом случае тебе не придётся сильно переделывать my_script. Но зато теряешь в удобстве вызова кода, например, если нужно получить значение из этого скрипта.
Чем больше ты вынесешь из main() в отдельные подпрограммы - тем больше контроля будет у главного скрипта, но и тем больше работы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы