2016-04-13 3 views
2

Я пытаюсь проверить несколько функций из отдельных файлов с одинаковыми именами.Вызов Функция из нескольких скриптов в python

Итак, рассмотрим У меня есть каталог каталогов: dir1 , который имеет s1, s2, s3, ..., зп, которые все каталоги и каждый из которых содержит файл с именем submission.py. Я не знаю, что такое s1 через sn до времени выполнения.

В каждом представлении.py есть функции f1-fm.

Я хотел бы создать скрипт, который выполняет f1 через fm и печатает их выходные данные для каждого файла s.sys-файла s.sys.py.

Я хотел бы думать, что я могу импортировать каждый файл submission.py в каждый каталог, но проблема в том, что каждый файл имеет то же имя. Кроме того, s1 через sn неизвестно до времени выполнения. Очевидно, я могу определить s1 через sn, используя функцию os.listdir.

Любая идея о том, как я могу вызвать f1 из двух разных файлов после получения имен каталогов через os.listdir?

+0

Выполните подкаталоги s1, s2, s3 и т.д. каждый из которых содержит '__init__.py 'файлы? – wim

+0

Нет. Подкаталоги на самом деле представляют собой каталоги представления учеников, и они просто представляют простые сценарии. – mattsap

ответ

2

Это возможно, используя imp.

>>> import os, imp 
>>> dirs = os.listdir('.') 
>>> dirs 
['s1', 's2'] 
>>> modules = {d: imp.load_source(d, d + '/submission.py') for d in dirs} 
>>> modules 
{'s1': <module 's1' from 's1/submission.py'>, 
's2': <module 's2' from 's2/submission.py'>} 

Затем, чтобы вызвать функцию f3 в submission.py модуля, содержащегося в подкаталоге s2, например, было бы:

modules['s2'].f3() 
+0

Это решение красивое. – mattsap

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