Вызов функции Python из коллекции файлов, содержащих функции - PullRequest
1 голос
/ 17 февраля 2012

Я работаю над проектом, в котором пользователи могут определять функции (для работы с БД 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

1 Ответ

2 голосов
/ 17 февраля 2012

Модуль importlib - это то, что вы ищете вместе с os и os.path

После загрузки файлов вы можете использовать Inspect.* Модуль 1008 * и / или dir() для создания списка доступных функций / классов / и т. Д.

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