#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. Также, если вы знаете об ООП, вы можете определить базовый класс с виртуальной функцией, в которую абстрагируется бизнес-процесс, каждый сценарий определяет подкласс, наследующий базу, тогда вы можете вызвать одну и ту же функцию для каждого сценария.