我是一名PHP程序员,但我想学习Python。 我对如何真正执行一个脚本有点困惑。 我在我的web服务器根目录下创build了test.py,在我写的文件中:
#!/usr/bin/python import jon.cgi as cgi import jon.fcgi as fcgi print "Content-type: text/html" print "hello world"
我的服务器在CentOS 5上运行Litespeed,按照教程: http : //www.litespeedtech.com/support/wiki/doku.php?id= litespeed_wiki:python_fcgi我已经安装了Jon的CGI。
但是当我在浏览器中导航到脚本时,它只是打印完整的代码,就好像它不parsing它。 对不起,如果我问一个愚蠢的问题,我将不胜感激任何帮助,谢谢。
一个真正的答案需要更多的信息(相关的path,configuration块,你的* .py可执行文件,你configuration等重新启动后),所以我要尽我所能,但首先…
不同于具有内置在解释器中的fastCGI的PHP,Python不会隐藏你的fastCGI实现。 在最基本的层面上,这个test.py会设置无效的头文件( \r\n换行符是强制的 ),并且在头文件和主体之间缺less所需的空白行。 这些都是req.set_header()和req.write()函数(如示例中所示)处理的事情。
其次,您必须编写一个“永远”运行的fastCGI应用程序(或直到遇到最大数量的请求,并且服务器将其杀死以启动另一个应用程序)。 与PHP不同的是,没有像“php-cgi”那样的“python-cgi”(我意识到,无论如何…)将永远运行,并通过从各种文件中运行一点点源代码来处理请求。
该应用程序将有一个请求处理程序函数为每个请求调用,并负责读取和处理实际的请求。 在给出的例子中, Handler类(它是cgi.Handler的子类)被创build并被用来构造一个fastCGI服务器,它的run()方法被调用来处理问题的“永远运行”部分。 该类有一个process()成员添加,接受请求并执行一些操作。 这个“东西”是你有你的世界你好代码的地方。
根据您链接的示例中的configuration,当浏览器转到http://vhost.example.com/python/banana/apple.jpg ,litespeed将尝试连接到现有的/absolutepathto/demoapp.py进程套接字文件在/tmp/lshttpd/mypythonfcgi.sock (或者运行demoapp.py程序,然后根据需要连接)。 一旦连接,它使用fastCGI协议通过REQUEST_URI告诉正在运行的应用程序它有一个banana/apple.jpg的请求(我想可能是/python/banana/apple.jpg或类似的东西。给转储的请求,看看)。 这是由process()成员函数决定如何处理banana/apple.jpg请求。 与普通的PHP不同,URL不一定对应于各个源代码片段。 (虽然你可以编写一个使用REQUEST_URI来执行其他python程序的python程序。)
另外请注意,这个/absolutepathto/fastcgiapp.py传统上超出了你的服务器文档根目录,所以人们不能不小心下载应用程序本身。
现在 ,至于为什么你的脚本打印出来,而不是抛出一个错误的标题错误,给你一个空白页,或只是崩溃。 领导嫌疑人是三个之一:
/absolutepathto/test.py ”是不可执行的(尽pipe我确信这会导致错误) 如果它不是#1或#4,请用相关的litespeedconfiguration更新问题,我们将从那里开始。