В контексте сложного приложения мне нужно импортировать пользовательские "скрипты". В идеале script имел бы
def init():
blah
def execute():
more blah
def cleanup():
yadda
поэтому я просто
import imp
fname, path, desc = imp.find_module(userscript)
foo = imp.load_module(userscript, fname, path, desc)
foo.init()
Однако, как мы все знаем, пользователь script выполняется , как только load_module
запускается.
Это означает, что script может быть примерно таким:
def init():
blah
yadda
приведя к тому, что часть yadda
вызывается, как только я import
script.
Мне нужен способ:
- сначала проверьте, имеет ли он init(), execute() и cleanup()
- если они существуют, все хорошо
- если они не существуют, жалуйтесь
- не запускайте какой-либо другой код или, по крайней мере, пока я не знаю, нет init()
Обычно я принуждаю использовать тот же старый трюк if __name__ == '__main__'
, но я мало контролирую предоставляемый пользователем script, поэтому я ищу относительно безболезненное решение. Я видел всевозможные сложные трюки, включая разбор script, но ничего простого. Я удивлен, что этого не существует.. или, может быть, я ничего не получаю.
Спасибо.