2010-03-06 6 views
4

Я хочу запустить скрипт python из другого. Внутри я имею в виду, что любое изменение состояния от дочернего скрипта влияет на состояние родителя. Поэтому, если переменная установлена ​​в дочернем элементе, она изменяется в родительском.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 

ответ

8

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

module = __import__(sys.argv[1]) 

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

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

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

+0

благодарит greg. бонусные баллы, если вы можете показать, как это сделать, если файл python находится в другом каталоге, чем скрипт – Mike

+2

@Mike: обязательно, измените 'sys.path', возможно, вот так:' sys.path.append ("/ your/module/directory ")' –

1

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

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

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

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

+0

Python 3: ['exec'] (https://docs.python.org/3/library/functions.html#exec) – WillC

Смежные вопросы