Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why avoid CGI for Python with LAMP hosting?

Tags:

I have been using PHP for years. Lately I've come across numerous forum posts stating that PHP is outdated, that modern programming languages are easier, more secure, etc. etc.

So, I decided to start learning Python. Since I'm used to using PHP, I just started building pages by uploading an .htaccess file with:

addtype text/html py addhandler cgi-script .py 

Then, my sample pages look like:

 #!/usr/bin/python print "content-type: text/html\n\n" print "html tags, more stuff, etc." 

This works fine. But, I came across a comment in a post that said that CGI isn't the best way to use Python. Of course, it didn't mention what is the best way.

Why is it that using CGI is not the best way to use Python? What is the alternative?

Is there some totally other way to set up a simple Python site? Is there some completely different paradigm I should be looking at outside of .htaccess and .py files?

Related

  • Pros and Cons of different approaches to web programming in Python
  • What’s a good lightweight Python MVC framework? (esp., @Kevin Dangoor's answer)
  • How do I use python for web development without relying on a framework?
  • Python Web Framework - Not App Framework or CMS Framework
  • Python web programming
like image 965
Andrew Swift Avatar asked Mar 10 '09 12:03

Andrew Swift


People also ask

What does Python CGI do?

CGI stands for Common Gateway Interface in Python which is a set of standards that explains how information or data is exchanged between the web server and a routine script.

What does CGI FieldStorage do?

The FieldStorage instance can be indexed like a Python dictionary. It allows membership testing with the in operator, and also supports the standard dictionary method keys() and the built-in function len() .

Can only post to CGI scripts?

Your error message: Error 501, “Can only POST to CGI scripts”, is output when trying to POST to a non-CGI url. So, either put your (Python) CGI script in one of the default sub-directories, or modify the cgi_directories to make it "guess" correctly that the URL is supposed to be a CGI script.


2 Answers

Classic CGI isn't the best way to use anything at all. With classic CGI server has to spawn a new process for every request.

As for Python, you have few alternatives:

  • mod_wsgi
  • mod_python
  • fastcgi
  • standalone Python web server (built-in, CherryPy, Tracd )
  • standalone Python web server on non-standard port and mod_proxy in Apache
like image 67
3 revs Avatar answered Sep 22 '22 05:09

3 revs


Why is it that using CGI is not the best way to use Python?

I will stick up for CGI a little. It's good for development environments.

It's simple to wire up and you don't have to worry about module reloading problems. Naturally performance is terrible, but for dev you don't care.

Of course you should really be writing to the WSGI interface rather than CGI directly. You can then deploy through CGI using:

wsgiref.handlers.CGIHandler().run(application) 

and use the same application object to deploy through mod_wsgi other whatever other WSGI server you prefer in the production environment where speed matters (and the testing environment where you want it to be as close to production as possible).

like image 32
bobince Avatar answered Sep 19 '22 05:09

bobince