2016-08-23 2 views
-2

В сущности, я пытаюсь создать систему расширения, где каждый плагин подключается к важным функциям с помощью соответствующей функции в файле. Мне нужен способ запустить эту функцию и получить возвращаемое значение, просто перейдя через каталог «plugins».Как я могу рекурсивно импортировать каждый файл в каталог и запускать функцию в каждом из них?

В любом случае я мог бы это сделать?

+0

Вы можете найти [этот ответ] (http://stackoverflow.com/a/26623508/4014959) полезно, хотя написано для Python 2. –

ответ

0

вы можете импортировать файлы dinamicaly с помощью __import__

так что вам просто нужно перебирать папку ищет ру файлов (не ВПГ) и импортировать их

for root, dirs, files in os.walk(src_path): 
    for f in files: 
     if f.endswith('.py'): 
      m = __import__(f) 

m теперь будет instanc модуля , так что если у вас есть функция под названием my_func под ним, вы можете сделать:

m.my_func()

или если у вас есть имя функции в виде строки:

getattr(m,'my_func')()

+0

У меня на самом деле есть 1 проблема с этим, когда я пытаюсь запустить эту функцию, она говорит, что «модули« плагины »не имеют функции attritube« ». Любая идея, почему это происходит? – MiseroMCS

+0

Ну, похоже, что python находит ваш модуль, но не работает (вы на самом деле называли вашу функцию 'function'?), Попробуйте определить другие вещи в своем модуле и посмотреть, может ли он получить к ним доступ, или добавить некоторые из вашего кода, чтобы я мог помочь вам – DorElias

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