用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~
贱人就是矫情