Klingt blöd, aber mir fällt kein besseres Subject ein ....
Es geht darum, daß ich als Teil eines grösseren Skriptes eine Routine aufrufen möchte, die sich ändert.
Es geht darum eine Datei je nach Anwendungsfall weiter zu behandeln
Erste Lösung wäre , mit einer längeren if..elseif Abfrage und fixen Prozeduraufrufen zu arbeiten.
Da das Skript ohnehin mit einer Konfigurationsdatei arbeitet, habe ich eine Zeile "postprocessing_script= ..." mit dem Namen eines Skriptes
dieses wird dann mit subprocess.Popen samt Parametern aufgerufen.
Ist das geschickt oder gibt es da eine bessere Lösung?
Variable Routine aufrufen ...
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@drnicolas: Man kann Module auch dynamisch importieren (`importlib`) und dann eine feste Funktion, zum Beispiel `main()` in dem dynamisch importierten Modul aufrufen. Oder auch eine API definieren, die von so einem Modul erfüllt werden muss. Inklusive Testfunktion ob das Modul für die Datei zuständig ist. Also statt einem langen ``if``/``elif``-Konstrukt viele Module die dynamisch importiert werden, und die alle eine Testfunktion haben die entscheiden kann ob das Modul für die Datei zuständig/geeignet ist oder nicht, und eine Funktion die die Datei verarbeitet. Statt fester Funktionsnamen könnte man auch mit Dekoratoren arbeiten, mit denen man die entsprechenden Funktionen registrieren kann — dann könnte man auch Module schreiben die für mehrere Dateien zuständig sind, oder Funktionen für eine Datei auf mehrere Module verteilen. Der Fantasie sind da kaum Grenzen gesetzt. Man sollte nur aufpassen, dass man am Ende nicht selber ein Plugin-System wie beispielsweise `pluggy` programmiert, wo man einfach ein fertiges hätte nehmen können.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Also für ein minimales Plugin-System reichten damals 6 Zeilen. Der originale Link von 2008 funktioniert nicht mehr, aber hier https://web.archive.org/web/20090403053 ... framework/ kann man es noch mal nachlesen...