[Python-de] Probleme mit execfile() und import's...

jens diemer python-de-mailinglist at jensdiemer.de
Mit Sep 14 16:46:00 CEST 2005


Diez B. Roggisch schrieb:
> Eventuell mit reload. Aber generell nur mit dem subprocess, zu den Gruenden 
> siehe die Doku zu reload.


Ja ich sehe auch nur eine Lösung mit subprocess. Im konkreten Fall 
geht's eigentlich um CGI's mit Python's eigenen CGI-Server. Der 
verwendet execfile()  :(

Ich möchte allerdings auch meine CGI-Skripte nicht extra anpassen und 
überall eine reload() machen...

Meine aktuelle Lösung ist es, CGIHTTPServer.execfile zu überschreiben mit:

"""
class execscript:
     def __call__( self, scriptfile, dummy ):
         p = subprocess.Popen(
                 "%s %s" % ( sys.executable, scriptfile ),
                 cwd     = ".",
                 shell   = True,
                 stdin   = subprocess.PIPE,
                 stdout  = subprocess.PIPE,
                 stderr  = subprocess.PIPE
             )
         p.stdin = sys.stdin

         sys.stdout.write( p.stdout.read() )
         sys.stderr.write( p.stderr.read() )

CGIHTTPServer.execfile = execscript()
"""

Das klappt soweit. Änderungen sind immer wirksam, weil halt immer ein 
neuer Python-Interpreter gestartet wird.

Nun hab ich allerdings ein neues Problem :(

Und zwar, werden anscheinend keine POST-Formulare korrekt an's CGI 
geschickt.
Genauer gesagt, liefert cgi.FieldStorage() keine Werte. Aus den cgi.py 
Sourcen kann man entnehmen, das cgi.FieldStorage() die Daten per stdin 
liest (Zeile 629). In CGIHTTPServer.py Zeile 294 wird anscheinen stdin 
irgendwie gefüttert.

Offensichtlich klappt die übertragung der Daten per subprocess nicht 
richtig mit "p.stdin = sys.stdin"

Ich weiß allerdings nicht wie es richtig gehen könnte :(


-- 
Mfg.

Jens Diemer


----
http://www.jensdiemer.de