Python, динамически вызывать скрипт - PullRequest
5 голосов
/ 06 марта 2010

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

Обычно вы можете сделать что-то вроде

import module

Но проблема здесь в том, что запускаемый дочерний скрипт является аргументом для родительского скрипта, я не думаю, что вы можете использовать импорт с переменной

как-то так

$python run.py child.py

Это было бы то, что я ожидал бы случиться

#run.py

#insert magic to run argv[1]
print a

#child.py
a = 1

$python run.py child.py
1

Ответы [ 2 ]

9 голосов
/ 06 марта 2010

Вы можете использовать функцию __import__, которая позволяет динамически импортировать модуль:

module = __import__(sys.argv[1])

(Возможно, вам придется удалить конечный .py или не указывать егов командной строке.)

Из документации Python:

Прямое использование __import__() редко, за исключением случаев, когда вы хотите импортировать модуль, имя которого известно тольково время выполнения.

1 голос
/ 06 марта 2010

Хотя __import__, безусловно, выполняет указанный файл, он также сохраняет его в списке модулей Python.Если вы хотите повторно выполнить тот же файл, вам придется выполнить перезагрузку.

Вы также можете взглянуть на оператор python exec, который может быть более подходящим для вашегоneeds.

Из документации Python:

Этот оператор поддерживает динамическое выполнение кода Python.Первое выражение должно вычисляться как строка, объект открытого файла или объект кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...