使用Python编写一个在Linux下实现截图分享的脚本的教程
admin
2023-07-31 02:24:51
0

引子

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

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...