Seite 1 von 1

Externe Methoden in Zope verwenden (?)

Verfasst: Dienstag 6. Dezember 2005, 02:58
von Gast
Hallo,
ich habe ein Python Script, welches die Bibliothek des Paketes "Snack" (tksnack) importiert und möchtes dieses als Externe Methode in Zope benutzen.

Code: Alles auswählen

from Tkinter import *         #wird für Snack benötigt
from tkSnack import *
root = Tk()
initializeSnack(root)

path = 'G:/wavs/'
snd = Sound()                                 #Snack Objekt

def playsnd(file)
       snd.read(path + file + '.wav')    #Snack Methode liest WAV-Datei
       snd.play()                                  #Snack Methode spielt WAV-Datei

playsnd('loop1')
root.mainloop()
Im Pythoninterpreter gestartet, wird die WAV-Datei 'loop1.wav' eingelesen und abgespielt. Jetzt will ich dieses Script von einer HTML Seite aus aufrufen. Die Seite ist sehr einfach und übergibt den Namen des zu ladenden Files

Code: Alles auswählen

<form method="POST" action="playsound"> 
       <table cellpadding="3" cellspacing="1"> 
       <tr><td>File: <input type="text" file="file" size="20"></td></tr> 
       <tr><td><input type="submit" value="play"></td></tr> 
       </table> 
</form> 
Ich muss jetzt zwei Dinge tun:

1. Das Pythonscript so umschreiben, dass es den Filenamen entgegen nimmt und an
die Funktion playsnd() übergibt (noch keine Ahnung wie das
geht , "context.REQUEST.file" ??)
2. Dieses Script als "Externe Methode" in Zope laden.
Wenn ich das Script in den Ordner "c:\Zope-Instance\Extensions" lade und versuche,
es in Zope mit "Select type to add" -> "External Method"
reinzuladen, bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

Error Type: ImportError
Error Value: No module named Snack
"tkSnack.py" und "tkSnack.pyw" liegen im Verzeichnis: "...\Python24\Lib"
und der Ordner "snacklib" mit allen nötigen Snack-DLLs, im Verzeichnis: "...\Python24\tcl"

- Wie bringe ich Zope bei wo sich diese Dateien befinden ?
- Oder muß ich das Zeugs zusätzlich ins Zopeverzeichnis kopieren ?
- Oder geht das was ich will grundsätzlich nicht, weil hier zusätzliche
Bibliotheken verwendet werden ? :roll:

nächtlichen Gruss, Seven

Verfasst: Dienstag 6. Dezember 2005, 12:07
von snakeseven
Hallo,
bitte nicht mehr auf obiges Beispiel eingehen, ich habe das Konzept geändert. Folgende Frage taucht nun auf:

Eine HTML Seite sendet eine Listboxauswahl per 'submit' an
folgendes Pythonscript:

Code: Alles auswählen

a = context.REQUEST.selectName
return "Auswahl: %s. " % a
Das Script sendet die Eingabe als Bestätigung zurück. Funktioniert auch.
Jetzt soll es aber den String nicht nur zurücksenden, sondern auch als Textdatei auf die lokale Festplatte speichern. Dazu schreibe ich das Script entsprechend um und lade es als 'Externe Methode' in Zope. Funktioniert auch.

Code: Alles auswählen

def auswahl(self):
    a = context.REQUEST.selectName
    d = open('E:\auswahl.txt',"w")
    d.write(a)
    return "Auswahl: %s. " % a
Wenn ich das Ganze jetzt aber austeste, bekomme ich folgende Fehlermeldung:


Error Type: NameError
Error Value: global name 'context' is not defined


Was muß ich im Script importieren, damit das nicht passiert ? Wo kommt 'context.REQUEST' genau her ? Sys ? OS ? String ?
Seven

Verfasst: Dienstag 6. Dezember 2005, 23:42
von Gast
Es funktioniert JUHU !! :lol:
So muss die Externe Methode aussehen:

Code: Alles auswählen

def auswahl(self):
      a = self.REQUEST.selectName
      d = open("E:/auswahl.txt","w")
      d.write(a)
      d.close()
      return "Auswahl: % s. " % a
Jetzt kann der Pythoninterpreter alle paar Sekunden im Textfile nachsehen ob was anliegt und dann das Zeugs abarbeiten.
Seven

Verfasst: Mittwoch 7. Dezember 2005, 12:31
von gerold
Anonymous hat geschrieben:Es funktioniert JUHU !! :lol:
Hi Seven!

Jetzt hast du es verstanden. :D :D
So hast du auch eine schöne Trennung zwischen Zope und dem GUI.

lg
Gerold
:-)