Python 调用 Hprose接口、Dubbo接口、Java方法
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- # *************************************
- # @Time : 2019/7/1
- # @Author : Zhang Fan
- # @Desc : Library
- # @File : MyTools.py
- # @Update : 2019/8/23
- # *************************************
- import telnetlib
- import hprose
- import jpype
- import json
- import os
- class MyHprose(object):
- """
- ===================================================================
- ===================== MyHprose =======================
- ===================================================================
- """
- def __init__(self):
- self.client = None
- self.base_url = None
- def create_http_client(self, address, url):
- """
- 创建HTTP客户端连接
- """
- self.base_url = 'http://' + address + url
- print('Creating Session : %s' % self.base_url)
- self.client = hprose.HproseHttpClient(self.base_url)
- def set_header(self, key, value):
- """
- 设置连接头
- """
- print('Set Header : { "%s": "%s" }' % (key, value))
- self.client.setHeader(key, value)
- def set_parameter(self, *args):
- """
- 设置参数值
- """
- arg_list = list()
- for arg in args:
- if isinstance(arg, str):
- try:
- arg = eval(arg)
- except Exception as e:
- logger.error(e)
- arg_list.append(arg)
- print('Set Parameter : %s' % str(arg_list))
- return arg_list
- def invoke_method(self, method, args):
- """
- 调用方法
- """
- result = {
- 'type': None,
- 'msg': None,
- 'value': None
- }
- print('Invoke Method : method={0}, args={1}'.format(method, args))
- ret = self.client.invoke(method, args)
- result['type'] = ret.types
- result['msg'] = ret.msg
- result['value'] = ret.value
- return json.dumps(result, ensure_ascii=False)
- class MyJpype(object):
- """
- ===================================================================
- ===================== MyJpype ========================
- ===================================================================
- """
- def __init__(self):
- pass
- def start_jvm(self, jvmpath, jarpath):
- """
- 开启java虚拟机.
- """
- print('Executing : Start JVM | java -ea -Djava.class.path=JedisSerialize.jar')
- jarpath = os.path.join(os.path.abspath(jarpath), "JedisSerialize.jar")
- jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % jarpath, convertStrings=False)
- def save_token_jvm(self, db, host, port, auth):
- """
- 调用java保存token到内存库.
- """
- JDClass = jpype.JClass("com.util.SearchRedis")
- jd = JDClass()
- jd.saveToken(int(db), str(host), int(port), str(auth))
- def get_redis_jvm(self, key, db, host, port, auth):
- """
- 调用java查询String类型内存库.
- """
- print('Executing : Query Key[%s] From Select[%s]' % (key, db))
- JDClass = jpype.JClass("com.util.SearchRedis")
- jd = JDClass()
- result = jd.getbit(str(key), int(db), str(host), int(port), str(auth))
- try:
- return eval(str(result))
- except:
- return json.loads(str(result))
- def get_hash_redis_jvm(self, key, db, host, port, auth):
- """
- 调用java查询Hash类型内存库.
- """
- print('Executing : Query Key[%s] From Select[%s]' % (key, db))
- JDClass = jpype.JClass("com.util.SearchRedis")
- jd = JDClass()
- result = jd.gethashbit(str(key), int(db), str(host), int(port), str(auth))
- try:
- return eval(str(result))
- except:
- return json.loads(str(result))
- def shutdown_jvm(self):
- """
- 关闭java虚拟机.
- """
- print('Executing : Shutdown JVM')
- jpype.shutdownJVM()
- class MyDubbo(telnetlib.Telnet):
- """
- ===================================================================
- ===================== MyDubbo =========================
- ===================================================================
- """
- def __init__(self, host=None, port=0):
- # super().__init__(host, port)
- super(MyDubbo, self).__init__(host, port)
- self.write(b"\n")
- def command(self, flag, str_=""):
- data = self.read_until(flag.encode())
- self.write(str_.encode() + b"\n")
- return data
- def invoke(self, service_name, method_name, arg):
- command_str = "invoke {0}.{1}({2})".format(service_name, method_name, arg)
- print('dubbo>:%s' % command_str)
- self.command('dubbo>', command_str)
- data = self.command('dubbo>', "\n")
- new_data = data.decode('utf-8', errors='ignore').split('\n')[0].strip()
- return json.loads(new_data)
- if __name__ == '__main__':
- print('This is test.')
- mh = MyHprose()
- mj = MyJpype()
- md = MyDubbo()
Python 调用 Hprose接口、Dubbo接口、Java方法的更多相关文章
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- 在windows下用python调用darknet的yolo接口
0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...
- Unity调用Android Studio中的Java方法
1. 新建Unity项目: 2. Android Studio中新建EmptyActivity: 3. 新建安卓项目时记住最小版本号: 4. 将左侧项目文件浏览面板切换到Project项下,在本项根节 ...
- Python调用云服务器AWVS13API接口批量扫描(指哪打哪)
最近因为实习的原因,为了减少一部分的工作量,在阿里云服务器上搭建了AWVS扫描器 方便摸鱼 但是发现AWVS貌似没有批量添加的方法,作者只好把整理的URL.txt捏了又捏 手动输入是不可能手动输入的, ...
- 简单实现Python调用有道API接口(最新的)
# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...
- Python 调用 C# dll库最简方法
1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...
- Python——调用shell命令的三种方法
1.用os.system(cmd) 不过取不了返回值 2.用os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd ...
- arcgis python 调用工具两种两种方法
arcpy.Select_analysis("p","kk") arcpy.analysis.Select("p","kk1&qu ...
- python调用不同目录中类的终极方法
1.在需要导入别的类包中加入这两行代码 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.a ...
随机推荐
- KVM虚拟机快照备份
KVM 快照的定义:快照就是将虚机在某一个时间点上的磁盘.内存和设备状态保存一下,以备将来之用.它包括以下几类: (1)磁盘快照:磁盘的内容(可能是虚机的全部磁盘或者部分磁盘)在某个时间点上被保存,然 ...
- HttpRunner学习6--使用parameters参数化
前言 在使用HttpRunner测试过程中,我们可能会遇到这种场景: 账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况 如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中 ...
- Hack the Zico2 VM (CTF Challenge)
下载链接: Download this VM here: https://download.vulnhub.com/zico/zico2.ova 端口扫描: ╰─ nmap -p1-65535 -sV ...
- iOS核心动画高级技巧-5
9. 图层时间 图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画.动画的发生是需要持续一段时间的 ...
- .NET Core 3.0正式版发布
是的,.NET Core 3.0正式版发布了,令人兴奋. WPF 其实,.NET Core 2.1开始已经是个很完善的版本,3.0又带来了什么呢?我站在我的使用角度来看,最最令人振奋的就是:能用WPF ...
- Android进程管理机制研究
一.Linux中的进程管理在Linux中,进程是指处理器上执行的一个实例,可使用任意资源以便完成它的任务,具体的进程管理,是通过“进程描述符”来完成的,对应Linux内核中的task_struct数据 ...
- vue组件常用声明方式
一.前言 这是自己重新写的一个,感觉以前的太写了很多不必要的方式 实际当中基本不会用的 所以自己写了一个常用的组件什么方式 更加的通俗易懂 二.代码如下 <!DOCTYPE html> & ...
- weed3-2.1.开始纯java使用
Weed3 一个微型ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 纯java使用 ...
- Prometheus学习系列(八)之Prometheus API说明
前言 本文来自Prometheus官网手册 和 Prometheus简介 HTTP API 在Prometheus服务器上的/api/v1下可以访问当前稳定的HTTP API. 将在该端点下添加任何非 ...
- 对Python中一些“坑”的总结及技巧
一.赋值即定义 1.运行以下代码会出现报错 #!/usr/bin/env python #_*_conding:utf-8_*_ x = 100 def outer(): def inner(): x ...