Вызов методов из динамического списка модулей - PullRequest
1 голос
/ 23 июня 2011

Я пытаюсь сделать две вещи здесь: динамически импортировать все модули в каталоге (количество / имена неизвестны), а затем для каждого из найденных модулей вызвать функцию checkMe (). checkMe () гарантированно присутствует в каждом модуле, поэтому нет необходимости проверять. Это то, что я до сих пор:

Импорт

import sys
import os
import glob

pathname = os.path.dirname(sys.argv[0]) + "/"
pathname = pathname + "/modules/"

__modules__ = [ os.path.basename(f)[:-3] for f in glob.glob(os.path.dirname(pathname)+"/*.py")]

for module in __modules__:
    __import__(module)

Вызов checkMe ()

for module in __modules__:
    m = getattr(sys.modules[__name__], module)
    getattr(m, 'checkMe').__call__()

Но я получаю эту ошибку:

AttributeError: 'module' object has no attribute 'sendme'

(sendme - первый модуль)

Любая помощь очень ценится ... спасибо!

1 Ответ

0 голосов
/ 23 июня 2011

__import__ имеет некоторую хитрую семантику в отношении пакетов (каталогов, содержащих __init__.py) и модулей. Вам нужно будет использовать аргумент fromlist, чтобы он работал. На самом деле, запуск модуля по пути проще всего с runpy (из комментариев: для run_path требуется Python 2.7 или новее):

import runpy
runpy.run_path('path/to/file.py')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...