在iis服务器上以cgi方式运行python脚本的教程

由于接触到python web开发,正好把最简单的cgi方式研究了一下,话说在windows下配置python的web开发还真的蛮麻烦的,linux下配置倒挺容易,正好微软有技术文章《using python scripts with iis》介绍了这些内容,此文介绍了两种方法,一是使用asp引擎来运行python脚本,这个可能需要用到activepython,当然asp技术已经过时了,我今天就简单介绍下cgi模块运行方式。

编写简单的支持cgi的python脚本(本文介绍3.2版本的python):

print(“status: 200 ok”)
print(“content-type: text/html”)
print() # 打印一行空白行,用于分隔http header和正文
print(“hello world!”)

这样就可以了,大家可以猜出cgi是将标准输出流重新定向到http输出流来实现网页或者数据传输的。

当然这个在iis中是不能直接运行的,我们需要配置一下,打开internet 信息服务(iis)管理器界面,选择“处理程序映射”。

2015425161112268.png (373×139)

在接下来出现的界面右侧选择“添加模块映射”。

iis7添加模块映射

2015425161152223.png (572×250)

假设我们的python 3.2安装于c:\python32,那么可以向下图这样填写:

2015425161216044.png (397×318)

然后点击确定,在接下来出现的对话框选择“是”。

2015425161237176.png (416×161)

好了,我们的配置完成了,重启一下iis,然后赶快试试刚才的代码吧。可能有人会抱怨,用cgi编写网页一旦报错调试会比较麻烦,比如报下面的错误:

http 错误 502.2 – bad gateway

指定的 cgi 应用程序由于未返回完整的一组 http 头而产生错误行为。它实际返回的头是“traceback (most recent call last): file “e:\projects\test.py”, line 3, in 1/0 zeropisionerror: pision by zero ”。

其实我们只需要在最开始引入import cgitb; cgitb.enable()就可以了,就像下面这样:

import cgitb; cgitb.enable()
print(“status: 200 ok”)
print(“content-type: text/html”)
print() # 打印一行空白行,用于分隔http header和正文
print(“hello world!”)

这样一旦出错,就会以友好的方式将错误输出来。

2015425161301420.png (610×391)

对于表单的处理,可以参考import cgi模块(cgi.fieldstorage),网上有很多此方面的介绍,我就不多说了,enjoy it!