cgi-Script-Aufruf von verschiedenen Rechnern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
oliba72

Guten Tag,
der Aufruf ein und desselben CGI-Scripts in Python von zwei verschiedenen Rechnern beschert mir unterschiedliche Ergebnisse, bei dem einen funktioniert das Script, bei dem anderen wird ein Fehler ausgegeben (in die errorlog-Datei des Webservers), das String-Object kenne kein Attribut 'index' bzw. 'find'. Mit dem Rechner, mit dem es funktioniert, habe ich einen Fehler hervorgerufen, um den Pfad des Scriptes zu prüfen. Es wird von beiden Rechnern genau dasselbe Script aufgerufen, nur mit zwei unterschiedlichen Ergebnissen. Kann mir das jemand erklären? Auf dem Webserver läuft Python 1.5.2.
MfG oliba
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

hmm. klingt irgendwie sehr komisch, da ein Script, wenns nicht irgendwelche Daten von den Rechnern empfängt (und verarbeitet), das gleiche Ergebniss bringen muss. Poste mal bitte den Quelltext, dann kann ich dir sagen ob es vielleicht am Script liegt, oder ob Python in der alten Version Schuld ist. In 1.5 gehen nämlich manche Sachen nicht, wenn du den Text ab Version 2.0 geschrieben hast... Kannst ja auch mal testen, was der Server ausgibt, wenn er das hier ausführt:

Code: Alles auswählen

#!/usr/bin/python
import cgitb; cgitb.enable()
from os import environ
from socket import gethostbyaddr

ip=environ.get('REMOTE_ADDR','localhost')
try:
    hostname=gethostbyaddr(ip)
except:
    hostname=(ip,[],[ip])

print "Content-type: text/plain\n"

print """%s

Current IP Address: %s
Hostname: %s"""%(ip,ip,hostname[0])
if hostname[1]:
    for name in hostname[1]:
        print " ; %s"%name
Das Script gibt die IP-Adresse des aufrufenden Rechners zurück und rechnet sie auch in Namen und potentielle Aliase um.
oliba72

Sehr gute Idee mit dem Hinweis, daß gewisse Dinge unter 1.5 nicht so laufen wie unter 2.x, der Quellcode sah folgendermaßen aus:
form = cgi.FieldStorage()

httpref = os.path.basename(os.environ["HTTP_REFERER"])
if string.find(httpref,'?') > 0:
httpref = httpref[:httpref.find('?')] <--diese Stelle wurde angemeckert mit:
AttributeError: 'string' object has no attribute 'find'

ich habe es zu:
httpref=httpref[:string.find(httpref,'?')]
geändert und nun funktioniert es auch mit dem anderen Rechner. Ich hatte schon festgestellt, das man immer Modul.Methode(Variable...) schreiben mußte statt Objekt.Methode(), auch Inkrementieren ala i++ ging nicht, die Scripte waren mit Python 2.1 entwickelt worden und ich hatte beim Umarbeiten diese Stelle übersehen. Warum es aber über meinen Rechner ging, verstehe ich trotzdem nicht, denn ich hatte bisher immer wieder Fehler ähnlichen Kalibers bekommen, nur bei dieser Stelle nicht.
Danke
Antworten