python 编写 cgi 脚本
cgi.py
使用python编写cgi程序时,需要使用该模块;它还提供了一些调试脚本,以及处理文件上传请求的工具。
1 介绍
cgi脚本由http server(Apache httpd,nginx)调用,通常处理一些用户提交的信息。
CGI脚本的输出应该包括两部分,这两部分由空行分开。
第一部分说明返回内容的形式:
print "Content-Type: text/html" # HTML is following
print # blank line, end of headers
第二部分是返回的内容,一般为html;
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"
2 使用
2.1
模块引用
import cgi
import cgitb
cgitb.enable()
cgitb 会开启异常处理机制,可以在浏览器中看到错误的详细信息。如果不想在页面显示,也可以通过以下形式将其保存在指定文件中:
import cgitb
cgitb.enable(display=0, logdir="/path/to/logdir")
在开发cgi脚本时特别有用。可以在脚本测试完成后,再删除cgitb配置行。
2.2 表单数据
处理表单数据时,最好使用 FieldStorage 类。
form = cgi.FieldStorage()
if "name" not in form or "addr" not in form:print "<H1>Error</H1>"print "Please fill in the name and addr fields."return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
...further form processing here...
值为空的表单字段会被过滤掉,因此使用时需要判断是否存某字段,也可以使用FieldStorage(keep_blank_values=true)来保留这些空值的字段。
- 字段值可以通过value属性获得;
- 也可以通过getvalue()方法获得,getvalue()方法运行设置defalut value。
当提交的表单中,一个字段name对应多个value时, getvalue()将返回一个list。如果使用 form.getlist(),那么将始终返回一个list。
value = form.getlist("username")
usernames = ",".join(value)
表单:
<input type="checkbox" name="item" value="1" />
<input type="checkbox" name="item" value="2" />
cgi脚本可以这样写:
item = form.getvalue("item")
if isinstance(item, list):# The user is requesting more than one item.
else:# The user is requesting only one item.
如果以简单的形式处理:
user = form.getvalue("user").upper()
这种情况下,请求数据的格式一定不能出错,如果有的client在url的query字符串中也添加了一个 item=foo。那么cgi脚本就崩溃了,因为getvalue会返回一个列表。
这种通过判断的形式写的cgi脚本,逻辑判断太多,可读性不好。一个更方便的方法是使用 getfirst() 和 getlist()。
FieldStorage.getfirst(name [, defalut])
该方法只返回第一个值,当然第一值是否与期望值是否匹配,因浏览器而异。如果字段值为空时,也可以给定一个默认值。
FieldStorage.getlist(name)
该方法始终返回一个list,当值为空时,则返回空list。
import cgi
form = cgi.FieldStorage()
user = form.getfirst("user", "").upper() # This way it's safe.
for item in form.getlist("item"):do_something(item)
这样的代码会显得更加优雅紧凑。
2.3 上传文件处理
如果字段为上传的文件名,那么通过value或者getvalue()访问该时将会以字符串的形式读取内存中的文件。一般情况下,应该先做判断,然后再读取。
fileitem = form["userfile"]
if fileitem.file:# It's an uploaded file; count lineslinecount = 0while 1:line = fileitem.file.readline()if not line: breaklinecount = linecount + 1
通过Post提交的表单,同时又存在 query 字符串的形式,那么将同时包含 FieldStorage 和 MiniFieldStorage。
3 函数
cgi.parse()
cgi.parse_header()
cgi.test()
cgi.print_environ()
cgi.print_form()
cgi.print_directory()
cgi.print_environ_usage()
cgi.escape()
4 其他
对于任何需要cgi脚本读、写的文件,应该有足够的读(0644)写(0666)权限,出于安全考虑,HTTP server以 ‘nobody’用户执行脚本,没有任何特殊权限。
当需要加载自定义的 python 模块时,可以先在脚本中更改模块搜索路径。
import sys
sys.path.insert(0, "/usr/home/joe/lib/python")
sys.path.insert(0, "/usr/local/lib/python")
- 如果脚本有语法错误,Pyhotn解析器就不会去执行,HTTP Server将会发送未知错误到client。
#> python cgi-script.py
通过以上方式可以检测是否有语法错误。
python 编写 cgi 脚本相关推荐
- 在IIS中写Python的CGI脚本
原文:怎样在IIS中写Python的CGI脚本 1.安装好Python: 2.配置IIS: a.打开管理工具-〉Internet信息服务: b.在网站属性上右键,进入属 ...
- 利用python编写手机脚本
利用python编写手机脚本 adb连接安卓模拟器 在手机里编写python脚本控制手机 如何使用python控制手机(以微信游戏跳一跳为例) adb连接安卓模拟器 链接(转载)https://www ...
- 用python写shell脚本_应用python编写shell脚本
今天同事叫我编写一个shell脚本.话说,虽然我受*nix的影响甚深,但是对于*nix里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没 ...
- python编写shell脚本详细讲解_python编写shell脚本详细讲解
今天同事叫我编写一个shell脚本.话说,虽然我受*nix的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全 ...
- python编写安装脚本_2. 编写安装脚本
2.编写安装脚本¶ The setup script is the centre of all activity in building, distributing, and installing m ...
- python编写简单脚本
1.编写示例脚本,命名为 print.py,打印:10,9,8,7--1 注意在脚本文件中指定本地 python 程序的安装路径 #!/usr/local/bin/python3 #!/usr/loc ...
- python编写自动化脚本 与shell_脚本安装Discuz论坛(shell + Python 实现自动化安装)...
实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...
- python编写arcgis脚本教程_ArcGIS二次开发(1)arcpy简介及编写一个自己的脚本
1.1.前言 在数据处理过程中,一般需要做一些数据的整理,如图层合并.裁剪等工作.虽然在ArcMap中也有提供对应的工具(批量处理.建模等),但对于多个步骤之前的衔接及其它特殊处理存在困难,本系列文章 ...
- python编写自动化脚本工具_blog/技巧与工具04-python控制鼠标自动化点击脚本.md at master · tigeroses/blog · GitHub...
title date tags category 技巧与工具04-python控制鼠标自动化点击脚本 2017-06-24 10:04:28 -0700 python pyautogui tools ...
- python编写arcgis脚本教程_面向ArcGIS的Python脚本编程
前言 1 鸣谢 3 第一部分 Python和地理处理的相关概念 4 第1章 Python简介 4 1.1 引言 4 1.2 Python的特点 4 1.3 脚本语言和程序语言 4 1.4 ArcGIS ...
最新文章
- SAP SD基础知识之信用风险管理概述
- 聚类(三)FUZZY C-MEANS 模糊c-均值聚类算法——本质和逻辑回归类似啊
- c语言 3个人比饭量大小,OpenJudge计算概论-比饭量【枚举法、信息数字化】
- 自然语言处理python进阶(一)
- Linux安装Jenkins
- Ehcache配置文件加载方式
- AOP的底层实现-CGLIB动态代理和JDK动态代理
- 易语言word模板复制粘贴_请给你的Word“打底妆”(让Word跑快些系列)
- rabbitmq python 发送失败_python rabbitmq no_ack=false
- JavaWeb如何学?
- 形式化方法(一) 逻辑部分概念梳理
- 老男孩Python 第7期 老男孩Python培训视频教程
- QT Designer中编辑菜单栏技巧
- 3.5.1_2 Maven - pom.xml 添加maven-assembly-plugin(官方标准打包插件)
- MIPAV - Talairach ACPC transform
- java中讲讲PrintWriter的用法,举例?
- 敏捷开发:一文了解影响地图和用户故事地图之间的那些事儿
- 【算法】求解幂集问题
- Python自动打码,DdddOcr通用验证码自动识别库
- 外网如何访问本地项目