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