[Tutor] Fw: Apache, CGI-BIN, Python

Eric Brunson brunson at brunson.com
Tue Sep 11 10:25:42 CEST 2007


ALAN GAULD wrote:
> Forwarding to the list....
>
> NB Use Reply-All when replying to the tutor list.
>
> Alan G.
>
> ----- Forwarded Message ----
> From: Ryan <silas428 at gmail.com>
> To: Alan Gauld <alan.gauld at btinternet.com>
> Sent: Tuesday, 11 September, 2007 5:32:33 AM
> Subject: Re: [Tutor] Apache, CGI-BIN, Python
>
> Alan Gauld wrote:
>   
>> "Ryan" <silas428 at gmail.com> wrote
>>
>>   
>>     
>>> I am running a Linux box and cannot find my Apache cgi-bin to put 
>>> some
>>> python scripts in. I know I probably have to create one but don't 
>>> know
>>> where and how.
>>>     
>>>       
>> I think there are several places that you can create cgi-bin depending
>> on how you configure apache. But the place I usually see it is 
>> directly
>> under the apache root directory - ie the one that is equivalent to / 
>> in
>> the url.
>>
>>   
>>     
>>> everything works fine except:
>>>
>>> form = cgi.FieldStorage()
>>>
>>> #This is where everything goes wrong
>>> #I get error messages for either the lastname line or firstname
>>>     
>>>       
>> Can you tell us
>> a) exactly what error messages and
>> b) How you are invoking the script - where are the values
>> supposed to be coming from?
>>
>>   
>>     
>>> lastname = form['lastname'].value
>>> firstname =form['firstname'].value
>>> message = firstname + " " + lastname
>>> print reshtml % message
>>>     
>>>       
>> The HTML Doc:
>>   
>>     
> <html>
>
> <form action = "test1.py">
> <p> Enter your first name:</p>
> <input type="text" name="firstname" size="40">
> <input type="text" name="lastname" size="40">
> <input type = "submit">
> <input type ="reset">
> </form>
> </html>
>
> Error:
>
> Mod_python error: "PythonHandler mod_python.publisher"
>   

You don't use the cgi module when using the mod_python publisher 
handler.  Your function will be called with the form variables as named 
parameters, like this:

def handle_form_input( req, firstname, lastname ):
    # do something here

I would recommend giving defaults for the parameters so if the user 
doesn't submit a value it, it doesn't throw an exception, like this:

def handle_form_input( req, firstname=None, lastname=None ):
    # whatever

And, I've been known to simulate the cgi behavior like this:

def handler_form_input( req, **form ):
    # access your form variables as an array
    print "You entered %s %s" % ( form[lastname], form[firstname] )

But, remember that this "form" is a simple dict, not a cgi.FieldStorage 
and I don't know what it does with multiple values with the same key.  
FieldStorage puts them in an array, you'd have to experiment with this 
in the publisher handler.

See how much better answers you get when you ask good questions and 
include error messages.  :-)

Hope that helps,
e.


> Traceback (most recent call last):
>
>   File "/usr/lib/python2.5/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
>     result = object(req)
>
>   File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 204, in handler
>     module = page_cache[req]
>
>   File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 82, in __getitem__
>     return self._checkitem(name)[2]
>
>   File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 124, in _checkitem
>     value = self.build(key, name, opened, entry)
>
>   File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 77, in build
>     return ModuleCache.build(self, key, req, opened, entry)
>
>   File "/usr/lib/python2.5/site-packages/mod_python/cache.py", line 371, in build
>     exec opened in module.__dict__
>
>   File "/var/www/python/test1.py", line 16, in 
>     lastname = form['lastname'].value
>
>   File "cgi.py", line 567, in __getitem__
>     raise KeyError, key
>
> KeyError: 'lastname'
>
> But I can get this script to work properly:
> def index(req):
>     return "Test succesful";
>
>
>
>   
>> HTH,
>>
>>
>>   
>>     
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>   



More information about the Tutor mailing list