用python cgi 接收外部发送的参数,参照上篇文,继续~(这里我用的是python2.x)

    在cgi-bin下创建一个接收文件比如update.py,内容如下:

#!/usr/bin/env python
import cgi
import json        #序列化模块 把一些特殊数据类型比如dict list 弄成str用的
import os
obj=cgi.FieldStorage()    #cgi的一个类
recvs=obj['data'].value    #接收data这个key的数据
data_dict=json.loads(recvs)        #反序列化  将str变成原数据类型(dict)把值传给data_dict
ip=os.environ['REMOTE_ADDR']        #获取参数 来访者ip
touplea=('cpu','mem','disk','net','time')    #我自定义的判断key
for i in touplea:                        #如果传递的数据中有我需要的key 写入该ip命名文件中
    if i in data_dict.keys():
        try:
             with open(ip,'a') as f:
                f.write("%s : %s"%(i,data_dict[i]))
        except:
            continue
    else:
        continue

结合发送数据的代码看一下 若不然迷糊:

#!/usr/bin/env python
import urllib
import urllib2                #爬虫也用这个 模拟浏览器请求的
import os
import json
datasss={'cpu':"15\n","mem":"24M\n",'disk':'xxxx/xxxx/xxxxxx/xxx\n'}  #这是要传递的真实数据
data_dict=json.dumps(datasss)        #序列化成str 
datass={"data":data_dict}            #用一个key,包裹所有数据的value
url='http://localhost:13333/cgi-bin/updata.py'    
datas=urllib.urlencode(datass)            #urllib的方法 类似序列化
req=urllib2.Request(url,data=datas,headers='"User-Agent":"cpu"')  #请求,header这里没用
ope=urllib.urlopen(url,datas)                #为了获取cgi server 返回的信息
print(ope.read())                        #如果有返回,打印信息,没有打印空行

    为了清楚 ,我都拆开了

    上边的代码1 是跑在cgi-bin下的一个接收数据并写入文件的过程,代码2是客户端序列化数据并发送到cgi服务端的过程

    代码2,使用了urllib和urllib2模块 在3.x里 如果想用代码里的功能 要导入的是urllib.request类,代码1,接收数据传递的字典key为data的数据 并写入以ip命名的文件中

    这个其实和上一篇的本地获取数据一样  只不过这个数据来源变成了远端,可以利用这个做一些类似监控传递数据的功能,结合web使用

    这个其实理解起来就是一个理解cgi.fieldstroage类功能的过程,没啥太多可说的,me也是初学者

    这里边坑不大,不出意外都能传递过去,重要的就是序列化没问题就基本没什么差错。

    一起学英文吧,迟早要看官方文档的,虽然这句英语必然没有什么卵用:

    Bitch,always bitch~

    贱人就是矫情