__init__.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #!/usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. import json,sys
  4. import codecs
  5. import os,io
  6. from urllib import parse, request
  7. import subprocess
  8. import asyncio
  9. import time
  10. import hashlib
  11. import random
  12. import logging
  13. import logging.config
  14. import base64
  15. import datetime
  16. import tempfile
  17. _sysCache={}
  18. # 设定缓存数据
  19. def setCache(key,value):
  20. _sysCache[key]=value
  21. # 得到缓存数据
  22. def getCache(key):
  23. if key in _sysCache:
  24. return _sysCache.get(key)
  25. else:
  26. return
  27. def _import(lib,target=-1):
  28. if target==-1:
  29. return __import__(lib)
  30. else:
  31. return __import__(lib,fromlist=(target))
  32. # 得到上级绝对路径
  33. def getAbsPath():
  34. return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  35. def b64encode(enstr):
  36. ss = base64.b64encode(enstr.encode('utf-8'))
  37. ss = str(ss.decode('utf-8'))
  38. return ss
  39. def b64decode(destr):
  40. ss = base64.b64decode(destr.encode('utf-8'))
  41. ss = str(ss.decode('utf-8'))
  42. return ss
  43. def ldjson(filename):
  44. with open(filename, "r") as data:
  45. # if data.startswith(u'\ufeff'):
  46. # data = data.encode('utf8')[3:].decode('utf8')
  47. data = json.load(data)
  48. return data
  49. return
  50. def md5(md5str):
  51. return hashlib.md5(md5str.encode(encoding='UTF-8')).hexdigest()
  52. def uri(url):
  53. with request.urlopen(url) as f:
  54. data = f.read()
  55. result = data.decode('utf-8')
  56. return json.loads(result)
  57. def uri2(url):
  58. with request.urlopen(url) as f:
  59. data = f.read()
  60. result = data.decode('utf-8')
  61. return result
  62. # 加载json文件
  63. def loadJson(filename, charset='utf-8'):
  64. with open(filename, "r", charset) as data:
  65. # if data.startswith(u'\ufeff'):
  66. # data = data.encode('utf8')[3:].decode('utf8')
  67. data = json.load(data)
  68. return data
  69. return
  70. # 打开新线程执行
  71. def asyncExecCmd(cmd):
  72. return execApp(cmd, 1)
  73. # 解析固定标签
  74. def parseVar(data):
  75. data = data.replace('[RAND]', str(random.random()))
  76. data = data.replace('[MSTIME]', str(gmtime() * 1000))
  77. data = data.replace('[TIME]', str(gmtime()))
  78. data = data.replace('[DATE]', str(gmdate()))
  79. return data
  80. # 执行系统命令
  81. # 解析动态标签
  82. def parseTag(data,name,value,tag='#'):
  83. data = data.replace((tag+name+tag), (value))
  84. return data
  85. def exejs(cmd, charset='utf-8'):
  86. data = __subprocess(cmd)
  87. if not data:
  88. return ''
  89. else:
  90. return str(data)
  91. def execApp(cmd, isback=0, charset='utf-8'):
  92. data = __subprocess(cmd)
  93. if isback == 0:
  94. pass
  95. else:
  96. return str(data)
  97. def execCmd(cmd, charset='utf-8'):
  98. return __subprocess(cmd)
  99. def __subprocess(cmd):
  100. rt_list=''
  101. try:
  102. # 得到一个临时文件对象, 调用close后,此文件从磁盘删除
  103. out_temp = tempfile.TemporaryFile(mode='w+',encoding='utf-8')
  104. # 获取临时文件的文件号
  105. fileno = out_temp.fileno()
  106. # 执行外部shell命令, 输出结果存入临时文件中
  107. p = subprocess.Popen(cmd, shell=True, stdout=fileno, stderr=fileno)
  108. p.wait()
  109. # 从临时文件读出shell命令的输出结果
  110. out_temp.seek(0)
  111. rt = out_temp.read()
  112. # 以换行符拆分数据,并去掉换行符号存入列表
  113. rt_list = rt.strip().split('\n')
  114. except Exception as e:
  115. print(e)
  116. finally:
  117. if out_temp:
  118. out_temp.close()
  119. return ''.join(rt_list)
  120. def toLog(message, ftype=0):
  121. logger = logging.getLogger()
  122. logger.propagate = False
  123. filename = time.strftime('%Y-%m-%d', time.localtime(time.time()))
  124. filename2 = time.strftime('%H', time.localtime(time.time()))
  125. handler = logging.StreamHandler()
  126. if not os.path.exists("./log/" + filename + "/"):
  127. try:
  128. os.makedirs("./log/" + filename + "/")
  129. except Exception as ex:
  130. pass
  131. if ftype == 0:
  132. ftype = ''
  133. else:
  134. ftype = ftype+"."
  135. handler_file = logging.FileHandler(
  136. "./log/" + filename + "/" + ftype + filename2 + ".err")
  137. logger.addHandler(handler)
  138. logger.addHandler(handler_file)
  139. logger.setLevel(logging.NOTSET)
  140. nowtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  141. logger.info({'time': nowtime, 'info': message})
  142. logger.removeHandler(handler)
  143. logger.removeHandler(handler_file)
  144. def time2utc(strtime):
  145. strtime = time.strptime(strtime, "%Y-%m-%d %H:%M:%S")
  146. strtime = int(time.mktime(strtime))
  147. return strtime
  148. def timeofHmd2utc(hmd):
  149. curDate = time.strftime("%Y-%m-%d", time.localtime())
  150. checkToTime = time2utc(curDate + ' ' + hmd)
  151. return checkToTime
  152. def gmtime():
  153. return int(time.time())
  154. def gmdate():
  155. return utc2timestamp(int(time.time()))
  156. def saveFile(path, data):
  157. with open(path, "w", encoding='utf-8') as f:
  158. f.write(data)
  159. def appendFile(path, data):
  160. with open(path, "a+", encoding='utf-8') as f:
  161. f.write(data)
  162. def readFile(path):
  163. with open(path, "r", encoding='utf8') as f:
  164. return f.read()
  165. return
  166. def utc2timestamp(nowtime):
  167. time_local = time.localtime(nowtime) # 转换成新的时间格式(2016-05-05 20:28:54)
  168. dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
  169. return dt
  170. def parseListByXpath(data, path):
  171. path = path.split('/')
  172. for item in path:
  173. if data[item]:
  174. data = data[item]
  175. return data
  176. def postData(url, data):
  177. textmod = data
  178. textmod = parse.urlencode(textmod).encode(encoding='utf-8')
  179. pycomm.toLog(textmod, 'post')
  180. # 输出内容:user=admin&password=admin
  181. header_dict = {
  182. 'User-Agent':
  183. 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'
  184. }
  185. try:
  186. req = request.Request(url=url, data=textmod, headers=header_dict)
  187. res = request.urlopen(req)
  188. res = res.read()
  189. pycomm.toLog(res, 'post')
  190. except Exception as e:
  191. # appendFile(os.path.abspath(os.curdir) + '/log/post.log',str({'data':textmod,'url':url}))
  192. pycomm.toLog("Unexpected Error: {}".format(e), 'post')
  193. # 输出内容(python3默认获取到的是16进制'bytes'类型数据 Unicode编码,如果如需可读输出则需decode解码成对应编码):b'\xe7\x99\xbb\xe5\xbd\x95\xe6\x88\x90\xe5\x8a\x9f'
  194. # pycomm.toLog(res.decode(encoding='utf-8'))
  195. # 输出内容:登录成功
  196. def getAsyncLoog():
  197. try:
  198. loop = asyncio.get_event_loop()
  199. if(loop.is_running()):
  200. loop = getNewLoop()
  201. if(loop.is_closed()):
  202. loop = getNewLoop()
  203. except Exception as ex:
  204. loop = getNewLoop()
  205. def asyncExec(tasks):
  206. try:
  207. loop = asyncio.get_event_loop()
  208. if(loop.is_running()):
  209. loop = getNewLoop()
  210. if(loop.is_closed()):
  211. loop = getNewLoop()
  212. except Exception as ex:
  213. loop = getNewLoop()
  214. # 执行coroutine
  215. loop.run_until_complete(asyncio.gather(*tasks))
  216. loop.close()
  217. return loop
  218. # loop.close()
  219. def getNewLoop():
  220. loop = asyncio.new_event_loop()
  221. asyncio.set_event_loop(loop)
  222. return loop
  223. # item=[{url:,data:}]
  224. # 异步提交数据
  225. def asyncPost(item):
  226. if not item:
  227. return
  228. tasks = []
  229. for it in item:
  230. tasks.append(asyncCommit(it['url'], it['data']))
  231. asyncExec(tasks)
  232. async def asyncCommit(url, data):
  233. postData(url, data)