1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # *************************************
  4. # @Time : 2019/7/1
  5. # @Author : Zhang Fan
  6. # @Desc : Library
  7. # @File : MyTools.py
  8. # @Update : 2019/8/23
  9. # *************************************
  10. import telnetlib
  11. import hprose
  12. import jpype
  13. import json
  14. import os
  15.  
  16. class MyHprose(object):
  17. """
  18. ===================================================================
  19. ===================== MyHprose =======================
  20. ===================================================================
  21. """
  22. def __init__(self):
  23. self.client = None
  24. self.base_url = None
  25.  
  26. def create_http_client(self, address, url):
  27. """
  28. 创建HTTP客户端连接
  29. """
  30. self.base_url = 'http://' + address + url
  31. print('Creating Session : %s' % self.base_url)
  32. self.client = hprose.HproseHttpClient(self.base_url)
  33.  
  34. def set_header(self, key, value):
  35. """
  36. 设置连接头
  37. """
  38. print('Set Header : { "%s": "%s" }' % (key, value))
  39. self.client.setHeader(key, value)
  40.  
  41. def set_parameter(self, *args):
  42. """
  43. 设置参数值
  44. """
  45. arg_list = list()
  46. for arg in args:
  47. if isinstance(arg, str):
  48. try:
  49. arg = eval(arg)
  50. except Exception as e:
  51. logger.error(e)
  52. arg_list.append(arg)
  53. print('Set Parameter : %s' % str(arg_list))
  54. return arg_list
  55.  
  56. def invoke_method(self, method, args):
  57. """
  58. 调用方法
  59. """
  60. result = {
  61. 'type': None,
  62. 'msg': None,
  63. 'value': None
  64. }
  65. print('Invoke Method : method={0}, args={1}'.format(method, args))
  66. ret = self.client.invoke(method, args)
  67. result['type'] = ret.types
  68. result['msg'] = ret.msg
  69. result['value'] = ret.value
  70. return json.dumps(result, ensure_ascii=False)
  71.  
  72. class MyJpype(object):
  73. """
  74. ===================================================================
  75. ===================== MyJpype ========================
  76. ===================================================================
  77. """
  78. def __init__(self):
  79. pass
  80.  
  81. def start_jvm(self, jvmpath, jarpath):
  82. """
  83. 开启java虚拟机.
  84. """
  85. print('Executing : Start JVM | java -ea -Djava.class.path=JedisSerialize.jar')
  86. jarpath = os.path.join(os.path.abspath(jarpath), "JedisSerialize.jar")
  87. jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % jarpath, convertStrings=False)
  88.  
  89. def save_token_jvm(self, db, host, port, auth):
  90. """
  91. 调用java保存token到内存库.
  92. """
  93. JDClass = jpype.JClass("com.util.SearchRedis")
  94. jd = JDClass()
  95. jd.saveToken(int(db), str(host), int(port), str(auth))
  96.  
  97. def get_redis_jvm(self, key, db, host, port, auth):
  98. """
  99. 调用java查询String类型内存库.
  100. """
  101. print('Executing : Query Key[%s] From Select[%s]' % (key, db))
  102. JDClass = jpype.JClass("com.util.SearchRedis")
  103. jd = JDClass()
  104. result = jd.getbit(str(key), int(db), str(host), int(port), str(auth))
  105. try:
  106. return eval(str(result))
  107. except:
  108. return json.loads(str(result))
  109.  
  110. def get_hash_redis_jvm(self, key, db, host, port, auth):
  111. """
  112. 调用java查询Hash类型内存库.
  113. """
  114. print('Executing : Query Key[%s] From Select[%s]' % (key, db))
  115. JDClass = jpype.JClass("com.util.SearchRedis")
  116. jd = JDClass()
  117. result = jd.gethashbit(str(key), int(db), str(host), int(port), str(auth))
  118. try:
  119. return eval(str(result))
  120. except:
  121. return json.loads(str(result))
  122.  
  123. def shutdown_jvm(self):
  124. """
  125. 关闭java虚拟机.
  126. """
  127. print('Executing : Shutdown JVM')
  128. jpype.shutdownJVM()
  129.  
  130. class MyDubbo(telnetlib.Telnet):
  131. """
  132. ===================================================================
  133. ===================== MyDubbo =========================
  134. ===================================================================
  135. """
  136.  
  137. def __init__(self, host=None, port=0):
  138. # super().__init__(host, port)
  139. super(MyDubbo, self).__init__(host, port)
  140. self.write(b"\n")
  141.  
  142. def command(self, flag, str_=""):
  143. data = self.read_until(flag.encode())
  144. self.write(str_.encode() + b"\n")
  145. return data
  146.  
  147. def invoke(self, service_name, method_name, arg):
  148. command_str = "invoke {0}.{1}({2})".format(service_name, method_name, arg)
  149. print('dubbo>:%s' % command_str)
  150. self.command('dubbo>', command_str)
  151. data = self.command('dubbo>', "\n")
  152. new_data = data.decode('utf-8', errors='ignore').split('\n')[0].strip()
  153. return json.loads(new_data)
  154.  
  155. if __name__ == '__main__':
  156. print('This is test.')
  157. mh = MyHprose()
  158. mj = MyJpype()
  159. md = MyDubbo()

Python 调用 Hprose接口、Dubbo接口、Java方法的更多相关文章

  1. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  2. 在windows下用python调用darknet的yolo接口

    0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...

  3. Unity调用Android Studio中的Java方法

    1. 新建Unity项目: 2. Android Studio中新建EmptyActivity: 3. 新建安卓项目时记住最小版本号: 4. 将左侧项目文件浏览面板切换到Project项下,在本项根节 ...

  4. Python调用云服务器AWVS13API接口批量扫描(指哪打哪)

    最近因为实习的原因,为了减少一部分的工作量,在阿里云服务器上搭建了AWVS扫描器 方便摸鱼 但是发现AWVS貌似没有批量添加的方法,作者只好把整理的URL.txt捏了又捏 手动输入是不可能手动输入的, ...

  5. 简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  6. Python 调用 C# dll库最简方法

    1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...

  7. Python——调用shell命令的三种方法

    1.用os.system(cmd)   不过取不了返回值 2.用os.popen(cmd)   要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd ...

  8. arcgis python 调用工具两种两种方法

    arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1&qu ...

  9. python调用不同目录中类的终极方法

    1.在需要导入别的类包中加入这两行代码 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.a ...

随机推荐

  1. KVM虚拟机快照备份

    KVM 快照的定义:快照就是将虚机在某一个时间点上的磁盘.内存和设备状态保存一下,以备将来之用.它包括以下几类: (1)磁盘快照:磁盘的内容(可能是虚机的全部磁盘或者部分磁盘)在某个时间点上被保存,然 ...

  2. HttpRunner学习6--使用parameters参数化

    前言 在使用HttpRunner测试过程中,我们可能会遇到这种场景: 账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况 如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中 ...

  3. Hack the Zico2 VM (CTF Challenge)

    下载链接: Download this VM here: https://download.vulnhub.com/zico/zico2.ova 端口扫描: ╰─ nmap -p1-65535 -sV ...

  4. iOS核心动画高级技巧-5

    9. 图层时间 图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画.动画的发生是需要持续一段时间的 ...

  5. .NET Core 3.0正式版发布

    是的,.NET Core 3.0正式版发布了,令人兴奋. WPF 其实,.NET Core 2.1开始已经是个很完善的版本,3.0又带来了什么呢?我站在我的使用角度来看,最最令人振奋的就是:能用WPF ...

  6. Android进程管理机制研究

    一.Linux中的进程管理在Linux中,进程是指处理器上执行的一个实例,可使用任意资源以便完成它的任务,具体的进程管理,是通过“进程描述符”来完成的,对应Linux内核中的task_struct数据 ...

  7. vue组件常用声明方式

    一.前言 这是自己重新写的一个,感觉以前的太写了很多不必要的方式 实际当中基本不会用的 所以自己写了一个常用的组件什么方式 更加的通俗易懂 二.代码如下 <!DOCTYPE html> & ...

  8. weed3-2.1.开始纯java使用

    Weed3 一个微型ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 纯java使用 ...

  9. Prometheus学习系列(八)之Prometheus API说明

    前言 本文来自Prometheus官网手册 和 Prometheus简介 HTTP API 在Prometheus服务器上的/api/v1下可以访问当前稳定的HTTP API. 将在该端点下添加任何非 ...

  10. 对Python中一些“坑”的总结及技巧

    一.赋值即定义 1.运行以下代码会出现报错 #!/usr/bin/env python #_*_conding:utf-8_*_ x = 100 def outer(): def inner(): x ...