PyEnv (Last Try):
Verfasst: Mittwoch 23. Juli 2008, 17:44
Also,
Ich ist sicher aufgefallen das ich euch in letzter Zeit mal wieder besonders auf den Sack gehe. Das hat einen ganz einfachen Grund:
Ich probiere momentan eine sogeannten "Python Environment" zu schreiben, oder auch
kurz pyEnv. Was ist das?
Nun Ich habe mir das so vorgestellt:
Man startet ein main script diese stellt dir eine Konsole bereit. In dieser Konsole
kannst du besimmte Befehle aufrufen und diesen gleich bestimmte Parameter übergeben.
Z.b:
Dabei sollen die Befehle wie Plugins erweiterbar sein. Also ich schreibe z.B ein Script
in diesem ist eine Funktion definiert die dann nachher in der Konsole abrufbar ist.
Dieser "Plugin"-Ordner hieße dann Callbacks. Warum "Callbacks"? Weil ich es intern so realisiert habe:
Das heißt man "registriert" intern eine Referenz an eine bestimmte Funktion von
irgendwo und macht sie mit einem Namen abrufbar.
Z.b:
Jetzt habe ich es mir aber noch komplizierter gemacht. Manche meiner Scripte
brauchen nämlich z.B bestimmte Dateien mit denen sie arbeiten können und
Einstellungen die sie Abrufen können. (Z.b wenn ich mit meinem Modul pyTiddlyWikiarbeiten will)
Das heißt in dem Callbacks Ordner wird für jede Funktion ein weiter Unterordner erstellt
der den Namen der Funktion trägt. Also z.b:
Außerdem könnte, (oder sollte) man noch neben callbacks einen Ordner Depencies
erstellen damit pyEnv relativ portable bleibt. (Z.b BeautifulSoup) nach:
und nachher in der __init__.py in dem callbacks ordner den sys.path auf depencies erweitern. (Falls das so möglich ist)
Jetzt brauche ich im Prinzip also folgendes:
Wenn pyEnv.py gestartet wird (Die Console) muss es alle Module in 'config/callbacks'
finden und importieren. Danach muss es die in den Modulen verfügbaren funktionen mittels:
registrieren und dadurch
abrufbar machen.
Die Scripte in Callbacks laden sich dann ggf. ihre Einstellungs-Daten
aus den "files" und "settings" Ordner wenn sie aufgerufen werden.
Wenn niemand die Zeit findet das zu lesen, kein Problem.
Wenn es niemand verstanden hat, macht euch nichts daraus.
Wenn mir jemand helfen könnte, toll.
Mfg,
CracKPod
Ich ist sicher aufgefallen das ich euch in letzter Zeit mal wieder besonders auf den Sack gehe. Das hat einen ganz einfachen Grund:
Ich probiere momentan eine sogeannten "Python Environment" zu schreiben, oder auch
kurz pyEnv. Was ist das?
Nun Ich habe mir das so vorgestellt:
Man startet ein main script diese stellt dir eine Konsole bereit. In dieser Konsole
kannst du besimmte Befehle aufrufen und diesen gleich bestimmte Parameter übergeben.
Z.b:
Code: Alles auswählen
>>> add 5 10
15
>>>
in diesem ist eine Funktion definiert die dann nachher in der Konsole abrufbar ist.
Dieser "Plugin"-Ordner hieße dann Callbacks. Warum "Callbacks"? Weil ich es intern so realisiert habe:
Code: Alles auswählen
#!/usr/bin/python
import os
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:
##############################################################################
while True:
command = str(raw_input('>>> '))
if command:
parser.parse(command)
irgendwo und macht sie mit einem Namen abrufbar.
Z.b:
Code: Alles auswählen
def exit():
import sys #Unschön, Ich weiß
print 'Ende.'
sys.exit()
parser.register_callback('exit', exit)
...
>>> exit
Ende.
brauchen nämlich z.B bestimmte Dateien mit denen sie arbeiten können und
Einstellungen die sie Abrufen können. (Z.b wenn ich mit meinem Modul pyTiddlyWikiarbeiten will)
Das heißt in dem Callbacks Ordner wird für jede Funktion ein weiter Unterordner erstellt
der den Namen der Funktion trägt. Also z.b:
Code: Alles auswählen
callbacks
exit
files
settings
erstellen damit pyEnv relativ portable bleibt. (Z.b BeautifulSoup) nach:
Code: Alles auswählen
depencies
BeautifulSoup.py
Jetzt brauche ich im Prinzip also folgendes:
Wenn pyEnv.py gestartet wird (Die Console) muss es alle Module in 'config/callbacks'
finden und importieren. Danach muss es die in den Modulen verfügbaren funktionen mittels:
Code: Alles auswählen
parser.register_callback(command, name)
abrufbar machen.
Die Scripte in Callbacks laden sich dann ggf. ihre Einstellungs-Daten
aus den "files" und "settings" Ordner wenn sie aufgerufen werden.
Wenn niemand die Zeit findet das zu lesen, kein Problem.
Wenn es niemand verstanden hat, macht euch nichts daraus.
Wenn mir jemand helfen könnte, toll.
Mfg,
CracKPod