使用Python编写一个在Linux下实现截图分享的脚本的教程
作者:C Wong 发布时间:2022-04-23 13:23:11
标签:Python
引子
Linux下不支持QQ等功能丰富的IM,虽然可以通过wine运行QQ2012,但是还是喜欢在gtalk群中聊天,gtalk群不支持图片方式,这就要靠我们大家自己来解决了,eleven开放了一个Image上传和显示接口,提供了使用curl来解决,但是我们公司的网络使用squid禁止了curl的访问,所以整天看他们这么爽的分享图片我也不甘心阿,所以就使用Python写了一个分享图片的脚本
实现
使用scrot截图,然后使用urllib2库上传图片,如果存在PyQt4库则会将结果放到剪贴板上,如果不存在则输出,自行复制
代码
#!/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路径里,赋予执行权限即可
使用
默认的不跟图片地址则会截图,截图完毕后自动分享,如安装了PyQt4库则会将结果放到剪贴板,如没有则输出结果.如果脚本给了图片路径参数则上传给定路径的图片


猜你喜欢
- Pycharm是当前进行python开发,尤其是Django开发最好的IDE。GitHub是程序员的圣地,几乎人人都在用。本文假设你对pyc
- 多数情况下,mysql在刚刚安装时是不支持中文的,这是由于编码的问题我们可以通过修改配置文件,永久实现mysql对中文的识别首先我们要先将文
- Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种。Observer模式是行为模式之一,它的作用是当一个对象的状态
- 参考的一些文章以及论文我都会给大家分享出来 —— 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就
- remove()方法从列表中删除第一个obj。语法以下是remove()方法的语法:list.remove(obj)参数&nbs
- 最近为数据库服务器增加了内存,达到了最大支持的8G,数据库用的是mssql 2005 ,之前内存一直是4G的,不存在内存大和32位操作系统冲
- 一、序言本文承接[Mybatis缓存体系探究],提供基于MybatisPlus技术可用于生产环境下的二级缓存解决方案。1、前置条件掌握MyB
- sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。-
- 索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引
- 本文实例讲述了Python栈的实现方法。分享给大家供大家参考,具体如下:Python实现栈栈的数组实现:利用python列表方法代码如下:#
- 编号标准宗地编码(landCode)所在区段编码(sectCode)1131001BG001G0012131001BG002G0013131
- k8s容器互联-flannel vxlan 原理篇容器系列文章容器系列视频vxlan 模式通信原理flannel 在为不同主机的pod分配i
- 如何清除Vbscript惹出来的中文乱码? <script language=vbscript runat=s
- 一、实例演示1.将一个大Excel等份拆成多个Excel2.将多个小Excel合并成一个大Excel并标记来源work_dir="
- 大家好,本文将分享如何使用matplotlib制作动态条形图,制作的图很美,这个是我在之前发布的一篇中使用的图片,效果如下制作思路为了方便大
- Detecting When The User Has Clicked Cancel One of the things you may w
- 如下所示:加入代码:pd.set_option('display.width', 5000)补充知识:Python 实现不换
- 在python中启动和关闭线程:首先导入threadingimport threading然后定义一个方法def serial_read()
- 分布式 id 生成器在分布式场景中,唯一 id 的生成算比较重要。而通常在高并发场景中,需要类似 MySQL 自增 id 一样不断增长且又不
- 我就废话不多说了,直接上代码吧!import subprocessdef excuteCommand(com): ex = subproce