使用Python编写一个在Linux下实现截图分享的脚本的教程
引子
Linux下不支持QQ等功能丰富的IM,虽然可以通过wine运行QQ2012,但是还是喜欢在gtalk群中聊天,gtalk群不支持图片方式,这就要靠我们大家自己来解决了,eleven开放了一个Image上传和显示接口,提供了使用curl来解决,但是我们公司的网络使用squid禁止了curl的访问,所以整天看他们这么爽的分享图片我也不甘心阿,所以就使用Python写了一个分享图片的脚本
实现
使用scrot截图,然后使用urllib2库上传图片,如果存在PyQt4库则会将结果放到剪贴板上,如果不存在则输出,自行复制
代码
#!/usr/bin/envpython #-*-coding:utf-8-*- # #Author:cold #E-mail:wh_linux@126.com #Date:13/01/2109:54:39 #Desc:贴代码和图片 # importurllib2,json importmimetools importmimetypes importitertools __host__="http://eleveni386.7axu.com" classForm(object): def__init__(self): self.form_fields=[] self.files=[] self.boundary=mimetools.choose_boundary() self.content_type="application/x-www-form-urlencoded" return defget_content_type(self): returnself.content_type defadd_field(self,name,value): self.form_fields.append((name,value)) return defadd_file(self,fieldname,filename,fileHandle,mimetype=None): body=fileHandle.read() ifmimetypeisNone: mimetype=(mimetypes.guess_type(filename)[0] or 'applicatioin/octet-stream') self.files.append((fieldname,filename,mimetype,body)) self.content_type='multipart/form-data;boundary=%s'%self.boundary return def__str__(self): parts=[] part_boundary='--'+self.boundary parts.extend( [part_boundary, 'Content-Disposition:form-data;name="%s"'%name, '', value, ] forname,valueinself.form_fields) ifself.files: parts.extend([ part_boundary, 'Content-Disposition:form-data;name="%s";filename="%s"'%\ (field_name,filename), 'Content-Type:%s'%content_type, '', body, ]forfield_name,filename,content_type,bodyinself.files) flattened=list(itertools.chain(*parts)) flattened.append('--'+self.boundary+'--') flattened.append('') return'\r\n'.join(flattened) classHttpHelper(object): def__init__(self,url=None,form=None,method='GET'): self._url=url self._form=form self._body=str(form) self._method=method self._dst_url=None ifurl: self.make_request() defmake_request(self): url=self._url ifnotself._url.startswith('http://'): url='http://'+self._url self.request=urllib2.Request(url) ifself._form: self.add_header("Content-Type",self._form.get_content_type()) self.add_header("Content-Length",len(self._body)) self.request.add_data(self._body) defadd_header(self,key,val): self.request.add_header(key,val) defchange(self,url,params={},method='GET'): self._url=url self._params=params self._method=method self.make_request() defopen(self): response=urllib2.urlopen(self.request) content=response.read() self._dst_url=response.geturl() try: returnjson.loads(content) except: returncontent if__name__=="__main__": importargparse importos parser=argparse.ArgumentParser() parser.add_argument(dest="path",nargs="?") args=parser.parse_args() ifargs.path: path=args.path else: path=r"/tmp/tmpscrot.png" os.system("scrot-s{0}".format(path)) form=Form() filename=os.path.split(path)[-1] form.add_file(fieldname='mypic',filename=filename, fileHandle=open(path)) http=HttpHelper(__host__+'/Image/',form) url=http.open() try: fromPyQt4.QtGuiimportQApplication app=QApplication([]) cb=QApplication.clipboard() cb.setText(url) except: printurl
安装
将上面代码保存一个文件,放在PATH路径里,赋予执行权限即可
使用
默认的不跟图片地址则会截图,截图完毕后自动分享,如安装了PyQt4库则会将结果放到剪贴板,如没有则输出结果.如果脚本给了图片路径参数则上传给定路径的图片