在IIS服务器上以CGI方式运行Python脚本的教程


Posted in Python onApril 25, 2015

由于接触到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("<h1>Hello World!</h1>")

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

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

在IIS服务器上以CGI方式运行Python脚本的教程

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

IIS7添加模块映射

在IIS服务器上以CGI方式运行Python脚本的教程

假设我们的Python 3.2安装于C:\Python32,那么可以向下图这样填写:

在IIS服务器上以CGI方式运行Python脚本的教程

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

在IIS服务器上以CGI方式运行Python脚本的教程

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

HTTP 错误 502.2 - Bad Gateway

指定的 CGI 应用程序由于未返回完整的一组 HTTP 头而产生错误行为。它实际返回的头是“Traceback (most recent call last): File "E:\projects\test.py", line 3, in <module> 1/0 ZeroDivisionError: division by zero ”。

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

import cgitb; cgitb.enable()
print("Status: 200 OK")
print("Content-type: text/html")
print() # 打印一行空白行,用于分隔HTTP Header和正文
 
print("<h1>Hello World!</h1>")

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

在IIS服务器上以CGI方式运行Python脚本的教程

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

Python 相关文章推荐
Python的一些用法分享
Oct 07 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
简单介绍Python中的round()方法
May 15 Python
window下eclipse安装python插件教程
Apr 24 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
简单了解python变量的作用域
Jul 30 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python中if嵌套命令实例讲解
Feb 25 Python
python实现A*寻路算法
Jun 13 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
Apr 25 #Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 #Python
Python实现单词拼写检查
Apr 25 #Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 #Python
使用PDB简单调试Python程序简明指南
Apr 25 #Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 #Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 #Python
You might like
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python分割文件的常用方法
2014/11/01 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
用python对excel查重
2020/12/07 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
摄影实习自我鉴定
2013/09/20 职场文书
社区植树节活动总结
2015/02/06 职场文书
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL