使用Python编写一个在Linux下实现截图分享的脚本的教程


Posted in Python onApril 24, 2015

引子

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

Python 相关文章推荐
Python遍历文件夹和读写文件的实现方法
May 10 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
Selenium 配置启动项参数的方法
Dec 04 Python
教你怎么用python selenium实现自动化测试
May 27 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 #Python
Python的Tornado框架异步编程入门实例
Apr 24 #Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 #Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 #Python
简单说明Python中的装饰器的用法
Apr 24 #Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 #Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 #Python
You might like
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP网上调查系统
2006/10/09 PHP
PHP生成静态页面详解
2006/11/19 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python中的匿名函数使用简介
2015/04/27 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
物流管理专业大学生自荐信
2013/10/04 职场文书
环保公益广告语
2014/03/13 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
公务员考察材料
2014/12/23 职场文书
学生检讨书怎么写
2015/05/07 职场文书
实习报告怎么写
2019/06/20 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL