Я работаю над проектом, в котором пользователи могут определять функции (для работы с БД Redis, хотя это, вероятно, не имеет значения) в файле. Эти файлы будут жить в папке с множеством других похожих файлов. Подумайте о создании библиотеки функций, которые действуют на базе данных Redis как пользовательские команды Redis. Это может быть что-то похожее на homebrew
в том, что касается возможности добавления новых функций.
Как написано в настоящее время, человек, использующий сценарий, предоставит строковое представление функции, которую он хочет запустить, и сценарий найдет ее и запустит. Я бы хотел, чтобы основной сценарий мог просматривать файлы в этом каталоге библиотеки и делать все функции в каждом файле доступными для основного сценария.
Я знаю, как вызвать функцию из строки имени функции. Я не могу понять, как пройтись по файлам в этом каталоге и import
функциям или сделать функции доступными для вызова.
Прямо сейчас я работаю только с функциями, определенными в основном скрипте, используя такой код, где command
- строка имени функции, переданная из командной строки:
possibles = globals().copy()
possibles.update(locals())
custom_method = possibles.get(command)
if custom_method:
print custom_method(r)
В моей голове есть некоторые другие вопросы, например, возможно, я должен заставить все библиотечные методы жить в классе с тем же именем файла? Может ли это или что-то подобное сделать то, что я пытаюсь сделать, легче? Может быть, imp
модуль и find_module
могут помочь?
Последователь в Twitter предложил это решение: https://gist.github.com/1853553