Funktionen auslesen, registrieren Oo?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo,

Ich probiere momenta folgendes:

Code: Alles auswählen

#!/usr/bin/python

import config.callbacks as callbacks

class CommandParser(object):
    def __init__(self):
        self.callbacks = {}
       
    def register_callback(self, command, callback):
        self.callbacks[command] = callback
       
    def parse(self, string):
        tokens = string.split()
        command = tokens[0].lower()
       
        if self.callbacks.has_key(command):
            self.callbacks[command](tokens[1:])
            print
           
parser = CommandParser()

##############################################################################
#Register Callbacks:
parser.register_callback('exit', callbacks.exit)
##############################################################################

while True:
    command = str(raw_input('>>> '))
   
    if command != '':
        parser.parse(command)
Dabei ist callbacks einfach ein ordner mit einer "__init__.py" und hat dort ein modul namens callbacks.py in dem verschiedene Funktionen definiert sind die ich dann über die Schleife ansprechen kann.

Jetzt wollte ich es aber mehr wie ein Plugin-System gestalten. D.h man hat einen einen "magischen" Ordner wo man seine module reinpackt (wobei jedes Modul eine einzige Funktion ist) und diese dann einfach mit einem bestimmten string der im Modul steckt und der dazugehörigen funktion im parser mittels parser.register_callback() registriert werden. D.h Ich kann einfach kurz eine neue Funktion schreibe diese als Modul abspeichern und in den Ordner schieben. Beim nächsten ausführen das main-scriptes sollte diese Funktion dann registriert sein so das ich sie ansprechen kann.

Oder schreibe ich da besser eine Klasse in der alle Funktionen definiert sind und packe alles in eine Datei?...

Ich halte es mometan (meiner Meinung nach) umständlich.

Meine Scriptstruktur ist folgende:

Code: Alles auswählen

pyEnv:
    src:
        pyEnv.py
        config:
            __init__.py
           callbacks.py
           settings.py
           files:
               <Hier sind nur ein paar Dateien auf die die funktion in callbacks zugreifen>
               <Die Pfade zu den Dateien stehen in der settings.py>
           modules:
              <Hier sind die nicht in Python inkludierten Module die ich absichlich dahinpacke>
               <um das Script möglichst portable zu halten.>
Es soll halt nachher sowas wie eine Umgebung sein in der ich einfach schnell kleine Scripte / Helfer schreiben kann und dann über die "Konsole" aufrufen kann:
Wie der name sagt "Python Environment"

Ich bin mir sicher das es besser geht, und das jemand eine Lösung zu meinem Problem kennt, also...?

Ich würde mich über ein paar Ideen freuen.
Antworten