使用Python編寫一個在Linux下實(shí)現(xiàn)截圖分享的腳本的教程
引子
Linux下不支持QQ等功能豐富的IM,雖然可以通過wine運(yùn)行QQ2012,但是還是喜歡在gtalk群中聊天,gtalk群不支持圖片方式,這就要靠我們大家自己來解決了,eleven開放了一個Image上傳和顯示接口,提供了使用curl來解決,但是我們公司的網(wǎng)絡(luò)使用squid禁止了curl的訪問,所以整天看他們這么爽的分享圖片我也不甘心阿,所以就使用Python寫了一個分享圖片的腳本
實(shí)現(xiàn)
使用scrot截圖,然后使用urllib2庫上傳圖片,如果存在PyQt4庫則會將結(jié)果放到剪貼板上,如果不存在則輸出,自行復(fù)制
代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# Author : cold
# E-mail : wh_linux@126.com
# Date : 13/01/21 09:54:39
# Desc : 貼代碼和圖片
#
import urllib2, json
import mimetools
import mimetypes
import itertools
__host__ = "http://eleveni386.7axu.com"
class Form(object):
def __init__(self):
self.form_fields = []
self.files = []
self.boundary = mimetools.choose_boundary()
self.content_type = "application/x-www-form-urlencoded"
return
def get_content_type(self):
return self.content_type
def add_field(self, name, value):
self.form_fields.append((name, value))
return
def add_file(self, fieldname, filename, fileHandle, mimetype=None):
body = fileHandle.read()
if mimetype is None:
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,
]
for name, value in self.form_fields)
if self.files:
parts.extend([
part_boundary,
'Content-Disposition: form-data; name="%s"; filename="%s"' %\
(field_name, filename),
'Content-Type: %s' % content_type,
'',
body,
] for field_name, filename, content_type, body in self.files)
flattened = list(itertools.chain(*parts))
flattened.append('--' + self.boundary + '--')
flattened.append('')
return '\r\n'.join(flattened)
class HttpHelper(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
if url:
self.make_request()
def make_request(self):
url = self._url
if not self._url.startswith('http://'):
url = 'http://' + self._url
self.request = urllib2.Request(url)
if self._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)
def add_header(self, key, val):
self.request.add_header(key, val)
def change(self, url, params = {}, method = 'GET'):
self._url = url
self._params = params
self._method = method
self.make_request()
def open(self):
response = urllib2.urlopen(self.request)
content = response.read()
self._dst_url = response.geturl()
try:
return json.loads(content)
except:
return content
if __name__ == "__main__":
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument(dest="path", nargs="?")
args = parser.parse_args()
if args.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:
from PyQt4.QtGui import QApplication
app = QApplication([])
cb = QApplication.clipboard()
cb.setText(url)
except:
print url
安裝
將上面代碼保存一個文件,放在PATH路徑里,賦予執(zhí)行權(quán)限即可
使用
默認(rèn)的不跟圖片地址則會截圖,截圖完畢后自動分享,如安裝了PyQt4庫則會將結(jié)果放到剪貼板,如沒有則輸出結(jié)果.如果腳本給了圖片路徑參數(shù)則上傳給定路徑的圖片
相關(guān)文章
Python+SeaTable實(shí)現(xiàn)計(jì)算兩個日期間的工作日天數(shù)
在實(shí)際的項(xiàng)目管理、任務(wù)管理、工作計(jì)劃等場景中,某些時間段會涉及雙休日、法定節(jié)假日,甚至還有公司自定義的工作時間安排,所以就需要計(jì)算出兩個日期間的實(shí)際工作日天數(shù)。本文用Python+SeaTable實(shí)現(xiàn)這一需求,需要的可以參考一下2022-07-07
python django事務(wù)transaction源碼分析詳解
這篇文章主要介紹了python django事務(wù)transaction源碼分析詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
python實(shí)戰(zhàn)之90行代碼寫個猜數(shù)字游戲
這篇文章主要介紹了python實(shí)戰(zhàn)之90行代碼寫個猜數(shù)字,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很大的幫助,需要的朋友可以參考下2021-04-04
解決新django中的path不能使用正則表達(dá)式的問題
今天小編就為大家分享一篇解決新django中的path不能使用正則表達(dá)式的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
解決python3 json數(shù)據(jù)包含中文的讀寫問題
今天小編就為大家分享一篇解決python3 json數(shù)據(jù)包含中文的讀寫問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(內(nèi)置方式)
這篇文章主要介紹了matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(內(nèi)置方式),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

