当前位置:Gxlcms > Python > 使用Python编写一个在Linux下实现截图分享的脚本的教程

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

时间:2021-07-01 10:21:17 帮助过:38人阅读

引子

Linux下不支持QQ等功能丰富的IM,虽然可以通过wine运行QQ2012,但是还是喜欢在gtalk群中聊天,gtalk群不支持图片方式,这就要靠我们大家自己来解决了,eleven开放了一个Image上传和显示接口,提供了使用curl来解决,但是我们公司的网络使用squid禁止了curl的访问,所以整天看他们这么爽的分享图片我也不甘心阿,所以就使用Python写了一个分享图片的脚本
实现

使用scrot截图,然后使用urllib2库上传图片,如果存在PyQt4库则会将结果放到剪贴板上,如果不存在则输出,自行复制
代码

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. #
  4. # Author : cold
  5. # E-mail : wh_linux@126.com
  6. # Date : 13/01/21 09:54:39
  7. # Desc : 贴代码和图片
  8. #
  9. import urllib2, json
  10. import mimetools
  11. import mimetypes
  12. import itertools
  13. __host__ = "http://eleveni386.7axu.com"
  14. class Form(object):
  15. def __init__(self):
  16. self.form_fields = []
  17. self.files = []
  18. self.boundary = mimetools.choose_boundary()
  19. self.content_type = "application/x-www-form-urlencoded"
  20. return
  21. def get_content_type(self):
  22. return self.content_type
  23. def add_field(self, name, value):
  24. self.form_fields.append((name, value))
  25. return
  26. def add_file(self, fieldname, filename, fileHandle, mimetype=None):
  27. body = fileHandle.read()
  28. if mimetype is None:
  29. mimetype = ( mimetypes.guess_type(filename)[0]
  30. or
  31. 'applicatioin/octet-stream')
  32. self.files.append((fieldname, filename, mimetype, body))
  33. self.content_type = 'multipart/form-data; boundary=%s' % self.boundary
  34. return
  35. def __str__(self):
  36. parts = []
  37. part_boundary = '--' + self.boundary
  38. parts.extend(
  39. [ part_boundary,
  40. 'Content-Disposition: form-data; name="%s"' % name,
  41. '',
  42. value,
  43. ]
  44. for name, value in self.form_fields)
  45. if self.files:
  46. parts.extend([
  47. part_boundary,
  48. 'Content-Disposition: form-data; name="%s"; filename="%s"' %\
  49. (field_name, filename),
  50. 'Content-Type: %s' % content_type,
  51. '',
  52. body,
  53. ] for field_name, filename, content_type, body in self.files)
  54. flattened = list(itertools.chain(*parts))
  55. flattened.append('--' + self.boundary + '--')
  56. flattened.append('')
  57. return '\r\n'.join(flattened)
  58. class HttpHelper(object):
  59. def __init__(self, url = None, form = None, method = 'GET'):
  60. self._url = url
  61. self._form = form
  62. self._body = str(form)
  63. self._method = method
  64. self._dst_url = None
  65. if url:
  66. self.make_request()
  67. def make_request(self):
  68. url = self._url
  69. if not self._url.startswith('http://'):
  70. url = 'http://' + self._url
  71. self.request = urllib2.Request(url)
  72. if self._form:
  73. self.add_header("Content-Type", self._form.get_content_type())
  74. self.add_header("Content-Length", len(self._body))
  75. self.request.add_data(self._body)
  76. def add_header(self, key, val):
  77. self.request.add_header(key, val)
  78. def change(self, url, params = {}, method = 'GET'):
  79. self._url = url
  80. self._params = params
  81. self._method = method
  82. self.make_request()
  83. def open(self):
  84. response = urllib2.urlopen(self.request)
  85. content = response.read()
  86. self._dst_url = response.geturl()
  87. try:
  88. return json.loads(content)
  89. except:
  90. return content
  91. if __name__ == "__main__":
  92. import argparse
  93. import os
  94. parser = argparse.ArgumentParser()
  95. parser.add_argument(dest="path", nargs="?")
  96. args = parser.parse_args()
  97. if args.path:
  98. path = args.path
  99. else:
  100. path = r"/tmp/tmpscrot.png"
  101. os.system("scrot -s {0}".format(path))
  102. form = Form()
  103. filename = os.path.split(path)[-1]
  104. form.add_file(fieldname='mypic', filename=filename,
  105. fileHandle=open(path))
  106. http = HttpHelper( __host__ + '/Image/', form)
  107. url = http.open()
  108. try:
  109. from PyQt4.QtGui import QApplication
  110. app = QApplication([])
  111. cb = QApplication.clipboard()
  112. cb.setText(url)
  113. except:
  114. print url

安装

将上面代码保存一个文件,放在PATH路径里,赋予执行权限即可
使用

默认的不跟图片地址则会截图,截图完毕后自动分享,如安装了PyQt4库则会将结果放到剪贴板,如没有则输出结果.如果脚本给了图片路径参数则上传给定路径的图片

人气教程排行