problems with cgi script
kazan at kazan.
kazan at kazan.
Mon Jun 12 09:28:40 EDT 2000
Hello
I have written a small script that record uptimes on a server.
the classes used works just fine when I use them in scripts I run from the
command line
but I get this error when I run them as a cgi script
in netscape:
500 Server Error
The server encountered an internal error and could not complete your request.
and this output in the error log file:
[12/Jun/2000:20:35:53 GMT] cgi_header: unable to find LFLF
i use the boa webserver
the error occurs when I call a member funcion in class rekorder
like
rek = rekorder()
rek.lesFraFil()
if i just instantiates the object the rest of the script run just fine.
complete cgi script:
#!/usr/bin/python
import os
from oppe import rekorder
rek = rekorder()
rek.lesFraFil() # remove this and the script works
hostname = os.popen( "hostname" ).read()
print "Content-type: text/html\n\n"
print "<HTML>\n"
print "<TABLE BGCOLOR=ffcc00>"
print "<TR>"
print "<TD>"
print "<H1>"
print "Oppetid rekorder for"
print hostname
print "</H1>"
print "</TD>"
print "</TR>"
print "</TABLE>"
print "</HTML>"
# the oppe module file
import os,string,re,pickle
# definisjon av klasser
class Tid:
def __init__( self, dag, time, minutt ):
self.dag = dag
self.time = time
self.minutt = minutt
def samanlikn( self, other ):
if ( self.dag == other.dag and self.time == other.time and
self.minutt == other.minutt ):
return 0 # like
elif self.dag < other.dag:
return -1 # den som kaller er mindre
elif self.dag == other.dag and self.time < other.time:
return -1 # ditto
elif ( self.dag == other.dag and self.time == other.time and
self.minutt < other.minutt ):
return -1 # ditto
else:
return 1 # den som kaller er stoerre
class rekorder:
def __init__( self ):
self.oppeTider = [] # for aa lagre dei 3 oppetidene
def finnOppeTid( self ): # returner objekt av type Tid med oppetida naa
oppeTidStreng = os.popen( "uptime" ).readline()
# regular expressions for aa finne ulike typer oppetid
# f.eks med dager, timer, minutt
# timer + minutt eller berre minutt
timerMinutt = re.compile( r"""up\s*\d:\d""", re.IGNORECASE | re.DOTALL |
re.VERBOSE )
dagarTimerMinutt = re.compile( r"""\d.days""", re.IGNORECASE | re.DOTALL
| re.VERBOSE )
minutt = re.compile( r"""\d.min""", re.IGNORECASE | re.DOTALL |
re.VERBOSE )
# manipuler resultatet fra uptime kommandoen ettersom
# det er dagar, timer, minutt eller timer, minutt eller minutt
# og returner nytt Tid objekt med oppetida naa
if timerMinutt.search( oppeTidStreng ):
timerMinutt = string.replace( oppeTidStreng, ',',"" )
timerMinutt = string.split( timerMinutt )
timerMinutt = timerMinutt[ 2 ]
timerMinutt = string.split( timerMinutt, ':' )
dagar = 0
timer = string.atoi( timerMinutt[ 0 ] )
minutt = string.atoi( timerMinutt[ 1 ] )
oppeTidNaa = Tid( dagar, timer, minutt )
return oppeTidNaa
elif minutt.search( oppeTidStreng ):
oppeTidStreng = string.split( oppeTidStreng )
dagar = 0
timer = 0
minutt = string.atoi( oppeTidStreng[ 2 ] )
oppeTidNaa = Tid( dagar, timer, minutt )
return oppeTidNaa
elif dagarTimerMinutt.search( oppeTidStreng ):
oppeTidStreng = string.split( oppeTidStreng )
timerMinutt = oppeTidStreng[ 4 ]
timerMinutt = string.replace( timerMinutt, ',',"" )
timerMinutt = string.split( timerMinutt, ':' )
dagar = string.atoi( oppeTidStreng[ 2 ] )
timer = string.atoi( timerMinutt[ 0 ] )
minutt = string.atoi( timerMinutt[ 1 ] )
oppeTidNaa = Tid( dagar,timer, minutt )
return oppeTidNaa
def skrivTilFil(self):
utfil = open( "./usr/local/etc/oppetider",'w' )
p = pickle.Pickler( utfil )
p.dump( self.oppeTider[ 0 ] )
p.dump( self.oppeTider[ 1 ] )
p.dump( self.oppeTider[ 2 ] )
def lesFraFil(self):
#innfil = open( "./usr/local/etc/oppetider",'r' )
innfil = open( "./oppetider",'r' )
p = pickle.Unpickler( innfil )
self.oppeTider.append( p.load() )
self.oppeTider.append( p.load() )
self.oppeTider.append( p.load() )
def sjekkOmRekord(self, nyTid ): # sjekk om ny oppetid er ny rekord
if ( nyTid.samanlikn( self.oppeTider[ 0 ] ) == 1 ):
self.oppeTider[ 0 ] = nyTid
elif ( nyTid.samanlikn( self.oppeTider[ 0 ]) == -1 and
nyTid.samanlikn( self.oppeTider[ 1 ] ) == 1 ):
self.oppeTider[ 1 ] = nyTid
elif ( nyTid.samanlikn( self.oppeTider[ 1 ]) == -1 and
nyTid.samanlikn( self.oppeTider[ 2 ]) == 1 ):
self.oppeTider[ 2 ] = nyTid
thanks in advance
Erling R Elvsrud
More information about the Python-list
mailing list