Apache2.4下执行Python文件(CentOS7)

来源:互联网 发布:淘宝搜索关键词排行榜 编辑:程序博客网 时间:2024/06/03 12:37

如果修改apache服务器conf/httpd.conf文件Apache服务器无法启动,可以使用这个命令查看是修改的过程中是否否存在语法错误:

httpd.exe -n "MyServiceName" –t (其中MyServiceName是服务在计算机中的名称)


好,进入正题,开始在服务器上配置CGI环境,服务器的系统为CentOS7


首先肯定是安装Apache服务器,如何在CentOS7下安装Apache服务器已经在我的上一篇博客(http://blog.csdn.net/brazy/article/details/77164666)中做了详细的介绍,在这里就不再介绍了,现在假设已经装好了Apache服务器。


首先是安装Python,不过一般云服务器买的时候就预装了Python,(可以直接在命令行中输入Python看是否出现Python解释器即可),如果没有安装,那就用命令行安装

yum -y install python


然后就是配置CGI环境:

直接修改/etc/conf/httpd.conf文件

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

将这一行前面的注释去掉,然后再加上这几行,这样cgi的目录就在/var/www/cgi-bin下了

<Directory "/var/www/cgi-bin">    AllowOverride None    Options +ExecCGI    Order allow,deny    Allow from all    AddHandler cgi-script .cgi .pl .py</Directory>



这样服务器就已经配置好了CGI环境,服务器可以执行CGI脚本程序了。

然后就是在服务器上运行Python程序,执行python脚本了


为了验证有没有设置好环境,先运行一个测试python文件

#!/usr/bin/python# -*- coding: UTF-8 -*-print "Content-type:text/html"print                               # 空行,告诉服务器结束头部print '<html>'print '<head>'print '<meta charset="utf-8">'print '<title>Hello Word - 我的第一个 CGI 程序!</title>'print '</head>'print '<body>'print '<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>'print '</body>'print '</html>'

文件名为hello.py,文件放在/var/www/cgi-bin目录中

文件保存后修改 hello.py,修改文件权限为 755:

chmod 755 hello.py 
然后就是在浏览器中输入你的服务器的IP/cgi-bin/hello.py,就可以看到如下效果



然后就是采用POST/GET方法读取并显示用户的数据:

对于这个方案,我们将通过创建一个含有三个输入域和一个提交按钮的网页/var/www/html/page2.html开始。

  1. <html>
  2. <h1>Test Page 2</h1>
  3. <formname="input"action="/cgi-bin/myscript-2.py"method="get">
  4. First Name: <inputtype="text"name="firstName"><br>
  5. Last Name: <inputtype="text"name="lastName"><br>
  6. Position: <inputtype="text"name="position"><br>
  7. <inputtype="submit"value="Submit">
  8. </form>
  9. </html>

当"Submit"按钮点击,/var/www/cgi-bin/myscript-2.py脚本将被执行(通过action参数指定)。/var/www//html/page2.html显示在web浏览器中的图片如下所示(注意,三个输入域已经被填写好了):

/var/www/cgi-bin/myscript-2.py的内容如下:

  1. #!/usr/bin/python
  2. import cgi
  3. form = cgi.FieldStorage()
  4. print"Content-Type: text/html"
  5. print""
  6. print"<html>"
  7. print"<h2>CGI Script Output</h2>"
  8. print"<p>"
  9. print"The user entered data are:<br>"
  10. print"<b>First Name:</b> "+ form["firstName"].value +"<br>"
  11. print"<b>Last Name:</b> "+ form["lastName"].value +"<br>"
  12. print"<b>Position:</b> "+ form["position"].value +"<br>"
  13. print"</p>"
  14. print"</html>"

正如前面提到,import cgi语句用来确保能够处理用户通过web输入表单输入的数据。web输入表单被封装在一个表单对象中,叫做cgi.FieldStorage对象。一旦开始输出,"Content-Type: text/html"是必需的,因为web服务器需要知道接受自CGI脚本的输出格式。用户输入的数据在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的语句中可以得到。那些中括号中的名称和/var/www/html/page2.html文本输入域中定义的名称参数一致。

当网页上的"Submit"按钮被点击,下面的网页将被返回。

这个例子的要点就是你可以很容易地读取并显示用户在web表单上输入的数据。除了以字符串的方式处理数据,你也可以用Python将用户输入的数据转化为可用于数值计算的数字。

这样就可以完成用python脚本处理一些数据了,这样还是很棒的。

还有几点注意点一点要讲一下:

1.放在cgi-bin目录下的python文件的文件名一定不要是cgi.py,因为python处理程序要import cgi,这样会引起命名冲突,从而找不到cgi模块

2.如果没有命名为cgi.py的文件,但是仍然仍然有错误

AttributeError: 'module' object has no attribute 'FieldStotage', 

那就在python下,输入

import cgiprint cgi.__file__
看cgi文件所在的目录,如果那个目录下除了cgi.py,还有cgi.pyc,那就删除cgi.pyc,因为这个文件也会引起名字冲突而找不到这个模块

这是在使用cgi模块时,一定要注意的问题,博主在配置的过程中就被这几个坑给坑惨了,一定要记住不要将python文件命名为cgi.py, 坑还是太多了。。。

3.一定要学会去看日志信息,因为这个能给我们很多有用的信息,指导我们完成配置,文件为/var/log/httpd/error_log


参考资料:

http://www.runoob.com/python/python-cgi.html

http://www.jb51.net/article/97434.htm

http://www.linuxidc.com/Linux/2014-12/110188.htm

http://blog.csdn.net/corcplusplusorjava/article/details/39614041

http://python.jobbole.com/83788/