使用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库则会将结果放到剪贴板,如没有则输出结果.如果脚本给了图片路径参数则上传给定路径的图片