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

本文介绍了如何在CentOS7系统中,Apache2.4服务器上配置CGI环境以执行Python文件。内容包括安装Apache,启用CGI,修改httpd.conf配置,创建测试Python脚本hello.py,并通过GET/POST方法处理用户输入数据的示例。同时,提到了配置过程中可能遇到的命名冲突问题和解决办法,以及查看错误日志的重要性和相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

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

 

首先肯定是安装Apache服务器,如何在CentOS7下安装Apache服务器已经在我的上一篇博客(http://blog.youkuaiyun.com/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 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 cgi
print 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.youkuaiyun.com/corcplusplusorjava/article/details/39614041

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值