Ik programmeer vrijwel nooit maar af en toe vind ik het leuk om iets te proberen. Nu probeer ik een Python CGI-Script te maken. Dit werkt prima alleen kan ik geen locale klasse aanroepen.
Ik heb twee files: Index.cgi en address.py.
pseudo code index.cgi
address.py
Als ik de index.cgi uitvoer dan krijg ik netjes de output die ik verwacht:
10.0.201.175
255.255.255.0
Helaas bij het runnen van de website krijg ik een error:
Volgens mij komt dit dus doordat de file wordt uitgevoerd door de apache user die op andere plekken (kan) kijken voor de imports. Vandaar dat ik de "sys.path.insert(0, "/usr/lib/cgi-bin/")" opgeef, dit is de locatie waar zowel index.cgi als address.py staan. Helaas werkt dit niet.
Wat doe ik verkeerd en hoe los ik dit op. Is dit uberhaupt wel de manier hoe ik hoor te werken? Ik kan ook gewoon de address.py in de standaard locatie gooien (/usr/local/lib/python) maar dat lijkt me wel heel erg vreemd. Het liefst wil je natuurlijk gewoon al je files op 1 locatie hebben.
Ik heb twee files: Index.cgi en address.py.
pseudo code index.cgi
code:
1
2
3
4
5
| import address
ip = address.ip()
print ip.getIP('eth0')
print ip.getNetmask('eth0') |
address.py
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #!/usr/bin/env python
import netifaces
class ip:
def getInt():
int = netifaces.interfaces()
return int[1];
@staticmethod
def getIP( int ):
int = netifaces.ifaddresses(int)
s = int[netifaces.AF_INET]
return s[0]["addr"];
@staticmethod
def getNetmask( int ):
int = netifaces.ifaddresses(int)
s = int[netifaces.AF_INET]
return s[0]["netmask"];
def setIP():
return; |
Als ik de index.cgi uitvoer dan krijg ik netjes de output die ik verwacht:
10.0.201.175
255.255.255.0
Helaas bij het runnen van de website krijg ik een error:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
/usr/lib/cgi-bin/index.cgi in ()
4 import sys
5 sys.path.insert(0, "/usr/lib/cgi-bin/")
=> 6 import address
7 sys.path.insert(0, "/usr/local/lib/python")
8
address undefined
/usr/lib/cgi-bin/address.py in ()
=> 2 import netifaces
3 class ip:
4 def getInt():
5 int = netifaces.interfaces()
6 return int[1];
netifaces undefined |
Volgens mij komt dit dus doordat de file wordt uitgevoerd door de apache user die op andere plekken (kan) kijken voor de imports. Vandaar dat ik de "sys.path.insert(0, "/usr/lib/cgi-bin/")" opgeef, dit is de locatie waar zowel index.cgi als address.py staan. Helaas werkt dit niet.
Wat doe ik verkeerd en hoe los ik dit op. Is dit uberhaupt wel de manier hoe ik hoor te werken? Ik kan ook gewoon de address.py in de standaard locatie gooien (/usr/local/lib/python) maar dat lijkt me wel heel erg vreemd. Het liefst wil je natuurlijk gewoon al je files op 1 locatie hebben.
Lux.Architectuur | Van Dromen tot Wonen | www.Lux-a.nl