avanti und Python oder Wer hat Angst vor Schlangen?
Michael Lackhoff
lackhof at uni-muenster.de
Fr Nov 28 10:12:14 CET 1997
Herr Hoeppner schrieb:
> wer mal sehen will, wie man avanti mit der Scriptsprache Python
> ansteuern kann, findet bei uns auf dem ftp Server im Verzeichnis
> \ac15\windows die Datei PYCLIENT.LZH.
herzlichen Dank dafuer. Das Demo klappt bisher auch wunderbar (mit
kleinen Jobs). Ein Problem habe ich allerdings bei der Verarbeitung
der Antwort. Der entscheidende Abschnitt sieht so aus:
while 1:
# Schleife
data = s.recv(4096) # Daten empfangen
#1 *******************^^^^^^
# Falls AVANTI:EOR, dann ist Schlua
if string.find( data, "AVANTI:EOR" ) > -1:
# Ende Kennung wegnehmen
data = regsub.sub( "AVANTI:EOR", "", data );
#2 ************************************************^^^^^^
self.Antwort = self.Antwort + data
break # Abbruch dieser Schleife
# die empfangenen Daten an das bisher empfangene anh"ngen
self.Antwort = self.Antwort + data
Was passiert nun, wenn die komplette Antwort einschliesslich
AVANTI:EOR z.B. 5000 Zeichen hat? Dann kommt "AVANTI" im ersten
Durchlauf der Schleife und ":EOR" im zweiten. string.find muesste
sich dumm und dusselig suchen und der Client haengt sich in
einer Endlosschleife auf. Oder habe ich etwas uebersehen?
Natuerlich koennte man den Test jeweils auf Antwort loslassen aber
das wird bei groesseren Jobs doch eine Menge overhead.
Ich hatte es selbst vorher auch schon einmal versucht und bin auf
diese ebenfalls sehr unbefriedigende Loesung gekommen:
data = s.recv(100000) # ob das gutgeht?
lines = string.splitfields(data, '\n')
for line in lines:
if line == 'AVANTI:EOR':
s.close()
else: print line
Klar, ich habe mich da von Perl leiten lassen mit seiner
Moeglichkeit, sockets zeilenweise zu lesen. Es ist mir allerdings
nicht gelungen, mit einem kleineren buffer zeilenweise an data
anzuhaengen und jede gefuellte Zeile auf AVANTI:EOR zu pruefen.
Hat vielleicht jemand noch eine Idee dazu?
Oder gibt es vielleicht sogar demnaechst eine ganz andere
Moeglichkeit, auf avanti von Scriptsprachen aus zuzugreifen
(Stichwort SWIG)? ;-)
Ach ja, seit gestern gibt es die erste beta von python 1.5. Die hat
"richtige" Regular expressions (also so wie von Perl gewohnt). Damit
wird Python wohl wirklich zu einer Alternative. Etwas von Perls
"magic" muss es aber wohl doch noch lernen.
Gruss
Michael Lackhoff
########################################################################
# Michael Lackhoff e-mail lackhof at uni-muenster.de #
# Hoersterplatz 4 Tel. 0251-4833257 #
# 48147 Muenster FAX 0251-4833275 #
# Hochschule der Franziskaner und Kapuziner in Muenster #
########################################################################
Mehr Informationen über die Mailingliste Allegro