最近一周的时间在网上继续学习Python,接触到了Python的CGI编程,CGI的官方定义如下:
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。
我比较感兴趣的是Python CGI能写出多厉害的应用程序,所以我就直接开始学习了Python的编程部分,首先要配置Web服务器支持CGI,我电脑上已经装好了wamp集成开发环境,所以就不用装Apache了,网上有很多博文都是讲的如何在Apache下配置,而且是Linux环境下的,不过我想配置文件内容应该不会有很大变化,于是我就开始了我的鼓捣之旅。事实证明用windows来做开发真的是个坑。
根据在线学习网站Python CGI的说法,要先设置好CGI目录,在Apache的配置文件中修改httpd.conf
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
再修改httpd.conf文件如下:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all</Directory>
然后在AddHandler 中添加 .py 后缀,这样我们就可以访问 .py 结尾的 python 脚本文件:
做完这一切之后重新启动服务器(Apache/Wamp),编写第一个CGI程序,代码如下:
test1.py
#!D:\Python27\python # -*- coding: UTF-8 -*-print "Content-type:text/html\r\n\r\n"print '<html>'print '<head>'print '<title>Hello Word - First CGI Program</title>'print '</head>'print '<body>'print '<h2>Hello Word! This is my first CGI program</h2>'print '</body>'print '</html>'
第一行的内容指定了脚本解释器的位置,可以根据自己安装的路径更改
然后在浏览器地址栏输入:http://localhost/cgi-bin/test1.py
然后浏览器访问显示结果如下:
Hello Word! This is my first CGI program
没有什么问题
然后编写第二个程序:hello_get.py
#!D:\Python27\python# -*- coding: UTF-8 -*-# CGI处理模块import cgi, cgitb # 创建 FieldStorage 的实例化form = cgi.FieldStorage() # 获取数据first_name = form.getvalue('first_name')last_name = form.getvalue('last_name')print "Content-type:text/html\r\n\r\n"print "<html>"print "<head>"print "<title>Hello - Second CGI Program</title>"print "</head>"print "<body>"print "<h2>Hello %s %s</h2>" % (first_name, last_name)print "</body>"print "</html>"
在浏览器输入localhost/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
然而并没有像网站上说的那样输出
Hello ZARA ALI
而是出现了以下的错误提示
于是我就纳闷了,配置环境一样,代码都是一模一样,到底是哪里出问题了呢,然后我就百度Windows下Apache CGI配置方法,然而出来的都是Linux下的配置方法,于是没办法,我选择了重装wamp然后重新配置CGI环境,然后我依次将上面的每一步又都做了一遍,然后将网站上的代码复制到编辑器然后再次在浏览器中输入:
http://localhost/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
结果仍然是上面那一串错误提示,于是我仔细看了一下这个提示,大致意思就是:
服务器内部错误
服务器发生了一个内部错误或者由于错误配置从而无法完成我的请求
请邮件联系服务器管理员告知这个错误以及出现这个错误之前你做了什么操作
想了解更多信息请查阅服务器错误日志
因为这个于是我坚定不移地相信是因为我把服务器配置错了,正当我一筹莫展的时候,我突然想到,我之前没有修改任何配置文件时,第一个程序test1都能正确运行,会不会这个错误与配置文件无关呢,于是我试着把test1的第一行声明解释器路径的那一条语句去掉了,再次运行,浏览器中出现了同样的错误
所以我大感欣慰,因为这证实了我的猜想,和服务器的配置没有关系,是因为我的脚本文件有错,所以服务器无法回应请求,既然如此,那hello_get.py的错误也同样如此了,那么问题就简单多了,只要检查代码有没有写错的地方就行了。
这里我要反思自己的一个陋习:当我尝试着运行网站上的一个例程的时候,我总是一个ctrl C然后ctrl V复制粘贴到自己的编辑器中,简单一点的程序还好,复杂一点的,代码块很多的程序,这样的习惯带来的后果就是:缩进格式不正确,然后运行错误,这个问题在Python中体现得尤其明显,因为Python对缩进要求真的非常严格,所以千万不能复制粘贴Python程序到自己的程序中,一定要一个代码一个代码的敲,确保缩进在自己的控制之下。
我说到这里明白人已经看出我hello_get.py文件的错误之处在哪里了——就是没有自己动手敲,其实我之前也试过在网上copy C语言代码到VC++6.0里面,表面看上去语法完全正确,但是下面总有一个错误,提示也是看不懂的,所以在遇到这种情况的时候我才能想到可能是这个原因。这也警示大家,代码一定要自己动手一个字母一个符号地敲进你的程序当中,否则就会出现难以发觉的错误。
最后说说如何正确配置Windows下的wamp(Apache)才能正确执行CGI脚本,步骤很简单:
打开httpd.conf
将371行的
ScriptAlias /cgi-bin/ "D:/wamp/bin/apache/apache2.4.9/cgi-bin/"前面的#号去掉,就是解除注释,将后面引号里的D:/wamp/bin/apache/apache2.4.9/cgi-bin/改成自己的cgi-bin所在的路径
将387行f1f3f85950947386ceb2305656cc4f44引号里的内容也改成自己的cgi-bin所在的路径
保存之后重启服务器即可
【相关推荐】
2. 分享在IIS上用CGI方式运行Python脚本的实例教程
以上是分享一个PythonCGI编程的实例教程的详细内容。更多信息请关注PHP中文网其他相关文章!

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Python3.6环境下加载Pickle文件报错:ModuleNotFoundError:Nomodulenamed...

如何解决jieba分词在景区评论分析中的问题?当我们在进行景区评论分析时,往往会使用jieba分词工具来处理文�...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3汉化版
中文版,非常好用

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能