Выполнение динамического количества файлов .py

#python

#python

Вопрос:

Я создал структуру проекта, которая выглядит примерно так :

 Main.py
   |_ directory1
      |_ directoryA
         |_ script1.py
         |_ script1.sql
   |_ directory2
      |_ directoryB
         |_ script2.py
         |_ script2.sql
   |_ directory3
      |_ directoryC
         |_ script3.py
         |_ script3.sql
 

На самом деле вложенных папок, узлов дерева и файлов больше.

В main.py , я получаю динамический путь к каждому py-файлам во вложенных папках. Каждый файл .py выполняет .Связанный файл SQL.

Но я изо всех сил пытаюсь динамически выполнять каждый файл за одно выполнение. Таким образом, если я добавлю файл .py, он будет выполнен без изменения строки в main.py . Поскольку «выполнение» будет общим, а main py не знает имя класса, который он выполняет. И, кроме того, я должен передавать каждому файлу py экземпляр соединителя базы данных

Я хочу сделать что-то вроде этого :

 # Connector to the database

connecteur = ODBConnector(serveur, base, user, pwd)

### Execution

# Get each .py file in the subdirectories (glob), # return a list of absolute path

files = utils.getFichierParExt(racine, extension)

for file in files:

module = importlib.import_module(file)

module._init_(connecteur)
 

Я исследовал такие решения, как размещение файла bash. Но я не смог выполнить динамическую итерацию файлов и не передать экземпляр соединителя.

В какой-то момент я представлял себе каждый файл py как класс, чтобы разрешить функцию инициализации, которую я мог бы вызывать, не зная имени класса.

Мой вопрос: как я могу сделать это просто, и, кроме того, является ли это приемлемым дизайном в python?

Спасибо за вашу помощь.

Комментарии:

1. Выполняет ли каждый scriptX.py работать правильно? Вы можете перечислить файл python в папке, а затем использовать subprocess для запуска каждого scriptX.py

2. У вас уже есть код скрипта или вы разрабатываете их прямо сейчас?

3. Скрипты в файлах просто захватывают соединитель, выполняют сценарий SQL, выполняют некоторые элементы управления данными и экспортируют их. Я разработал его таким образом, чтобы они занимались только своими делами (они не взаимодействуют ни с main, кроме извлечения экземпляра ODBC, ни с другими скриптами).

4. Вы можете определить одну и ту же функцию во всех сценариях, а затем вызывать ее для каждого сценария. Вы также можете использовать отражение в python. просто Google reflection python.

5. Также, если вы знаете об ООП, вы можете определить базовый класс с виртуальной функцией, в которую абстрагируется бизнес-процесс, каждый сценарий определяет подкласс, наследующий базу, тогда вы можете вызвать одну и ту же функцию для каждого сценария.