Seite 1 von 1

CGIHTTPServer.py Problem

Verfasst: Montag 27. Juni 2005, 14:45
von hackbox
Hallo zusammen,

zum testen meiner cgi-scripte habe ich diesen einfachen http-server, der auf port 8080 läuft installiert:

Code: Alles auswählen

import os
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
srvaddr=("" ,8080)
cgisrv=HTTPServer(srvaddr ,CGIHTTPRequestHandler)
cgisrv.serve_forever()
damit er unter linux läuft überschreibt dieses script das modul:

Code: Alles auswählen

 #!/usr/bin/ python2.3

import re

#Pfad zum CGIHTTP-Server Modul
file="/usr/local/lib/python2.3/CGIHTTPServer.py"
replaced=0
data=open(file).readlines()
f=open(file,"w+")
for a in data:
    f.write(a)
    if a.find("have_fork")!=-1 and not replaced:
               f.write(re.search("\s+" ,a) \
               group()+"have_fork=None\n" ) // Syntaxfehler
               replaced=1
wobei in der vorletzten zeile ein syntaxfehler auftaucht, den ich noch nicht finden konnte. (noch python newbee)

starte ich den server ersceint folgende fehlermeldung:

Code: Alles auswählen

File "/usr/lib/python2.3/CGIHTTPServer.py", line 217, in run_cgi
    os.execve(scriptfile, args, os.environ)
OSError: [Errno 13] Permission denied
versuche ich http://localhost/cgi-bin/script.py

wird script.py vom browser nicht ausgeführt sondern als datei erkannt.


wie kann ich das problem lösen?

danke schon mal im voraus

gruss

hackbox

Edit (Leonidas): Code in Tags gesetzt.

Verfasst: Montag 27. Juni 2005, 14:54
von jens
Hä? :shock:

Du überschreibst die Original CGIHTTPServer.py Datei? Warum das denn???

RE CGIHTTPServer.py

Verfasst: Montag 27. Juni 2005, 15:08
von Gast
Hallo Jens,

ich überschreibe das Modul httpd.py mit correctCGIHTTPServer.py ,damit es unter UNIX funktioniert, d.h. Zeile für Zeile wird geparst, und sobald der String have_fork
zum ersten Mal vorkommt, wird eine Zeile hinzugefügt, die sicherstellen soll, dass das
Skript später funktioniert. (Nur für UNIX nötig)

gruss

hackbox

Re: RE CGIHTTPServer.py

Verfasst: Montag 27. Juni 2005, 15:12
von Leonidas
Anonymous hat geschrieben:sobald der String have_fork
zum ersten Mal vorkommt, wird eine Zeile hinzugefügt, die sicherstellen soll, dass das
Skript später funktioniert. (Nur für UNIX nötig)
Hast du ein Unix, dass nicht gescheit forken kann?

RERERERE CGIHTTPServer.py Problem

Verfasst: Montag 27. Juni 2005, 17:20
von hackbox
Hallo Anonymous,

ich arbeite vorzugsweise mit Linux (Debian Sid und Sarge) doch ich möchte sichergehen dass die scripte auf möglichst allen Unix Derivaten laufen, deshalb das Skript.

Gruss

Hackbox

Re: RERERERE CGIHTTPServer.py Problem

Verfasst: Montag 27. Juni 2005, 17:45
von Leonidas
hackbox hat geschrieben:Hallo Anonymous,
Der warst ja wohl du selbst :twisted: SCNR.
hackbox hat geschrieben:ich arbeite vorzugsweise mit Linux (Debian Sid und Sarge) doch ich möchte sichergehen dass die scripte auf möglichst allen Unix Derivaten laufen, deshalb das Skript.
Und die anderen Unix gerivate forken nicht ohne diese Zeile? Dein Vorgehen erscheint mir sonst recht seltsam..

Guck dir mal platform an, vielleicht hilfts dir..

Re: RE CGIHTTPServer.py

Verfasst: Montag 27. Juni 2005, 17:59
von jens
Anonymous hat geschrieben:ich überschreibe das Modul httpd.py mit correctCGIHTTPServer.py
So wie ich das sehe öffnest du "/usr/local/lib/python2.3/CGIHTTPServer.py" zum lesen und gleich danach zum schreiben ?!?!

Ich weiß nicht was das alles für einen Sinn hat... Auch wenn es nicht die Lösung sein wird, aber vielleicht hilft dir das weiter:

Code: Alles auswählen

#!/usr/bin/ python2.3

import re

#Pfad zum CGIHTTP-Server Modul
infile="/usr/local/lib/python2.3/CGIHTTPServer.py"
outfile="httpd.py"

replaced=0

f = file( infile, "r" )
data = f.readlines()
f.close()

f=file( outfile, "w+" )

for a in data:
    txt = re.search( "\s+" ,a )
    if ("have_fork" in txt) and not replaced:
        f.write( a )
        f.write( "have_fork=None\n" )
        replaced=1

f.close()

CGIHTTPServer.py Problem

Verfasst: Montag 27. Juni 2005, 18:38
von hackbox
Hallo Anonymous,

habe soeben deinen code durch den debugger geschickt.

in der Zeile if( "have_fork" in txt) and not replaced


wird eine unhandled exception ausgeworfen.

sie lautet:

Type Error

"iterable argument required"


wie und wo muss ich dieses iterable argument einfügen?


Danke für deine Hilfe.

gruss

hackbox

Verfasst: Dienstag 28. Juni 2005, 14:54
von Johi

Code: Alles auswählen

f.write(re.search("\s+" ,a) \
               group()+"have_fork=None\n" )
soll das

Code: Alles auswählen

re.search("\s+" ,a).group()
heißen?

Code: Alles auswählen

for a in data:
    f.write(a)
    if [...]:
               f.write([...], a)
soll heißen wenn die Regel Zutrifft wird die Zeile 2mal reingeschrieben, beim 2. mal verändert?

CGIHTTPServer Problem

Verfasst: Dienstag 28. Juni 2005, 15:53
von Gast
Hallo Johi,

also ich hab da wohletwas Verwirrung geschaffen.

Mein Problem ist folgendes:

um meine cgi-skripte zu testen hab ich mir einen simplen Http-Server geschrieben
(Code stammt von Martin Uza'k)

Code: Alles auswählen

import os
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
srvraddr=("",8080)
cgisrv=HTTPServer(srvraddr,CGIHTTPRequestHandler)
cgisrv.serve_forever()

der aus Sicherheitsgründen auf Port 8080 auf einer Linux-Kiste läuft.

Weil laut Martin bei Verwendung unter Unix ein Fehler im CGIHTTPServer-Modul
der beim forken auftreten soll, bin ich dessen Empfehlung gefolgt und habe ein Skript correctCGIHTTPServer.py verwendert

das jetzt dank deines Tips so aussieht:

Code: Alles auswählen

#!/usr/bin/ python2.3

import re

#Pfad zum CGIHTTP-Server Modul
infile="/usr/local/lib/python2.3/correctCGIHTTPServer.py"
outfile="httpd.py"



replaced=0

f = file( infile, "r" )
data = f.readlines()
f.close()



f=file( outfile, "w+" )


for a in data:
      txt = re.search("\s+" ,a).group()
    
      if ("have_fork" in txt) and not replaced:
               f.write( a )
               f.write( "have_fork=None\n" )
               replaced=1

f.close()

es soll das CGIHTTPServer-Modul entsprechend überschreiben d.h. beim ersten Vorkommen des Strings have_fork eine Zeile hinzufügen, was jedoch nicht zu funktionieren scheint, da ich die cgi-scripte unter
http://localhost:8080/cgi-bin/script-beispiel.py
nicht öffnen kann.

Ich hoffe jetzt wird es klarer was ich möchte.

Vielen Dank nochmals für euere Tipps

Gruss

Uli

Edit (Leonidas): Code in Python-Tags gesetzt.

Re: CGIHTTPServer Problem

Verfasst: Dienstag 28. Juni 2005, 16:02
von jens
Warum patchst du einfach nicht per Hand die CGIHTTPServer.py ???

Verfasst: Dienstag 28. Juni 2005, 22:12
von BlackJack
Ich verstehe das ganze Problem ehrlich gesagt auch nicht. Linux kann "forken", wenn CGI also bei Dir nicht funktioniert, dann würde ich erstmal versuchen das wirkliche Problem zu finden, bevor ich einfach eine systemweite Datei "verschlimmbessere".

Wenn es sein muss, dann mach die Änderung besser im Texteditor und schreib einen Kommentar dazu das, und was Du da getan hast.