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 ...
随机推荐
- C语言每日一练——第5题
一.题目要求 选出大于100小于1000的所有个位数与十位数字之和被10除所得余数恰好是百位数字的所有数字(如293).计算并输出上述这些素数的个数cnt以及这些素数值得sum,最后把结果cnt和su ...
- eclipse配置svn导出项目
eclipse安装svn 菜单栏help-->eclipse marketspace-->find中搜索subclipse,安装-->ok windows-->show vie ...
- 2016/09/22 mapreduce
1.概念 Mapreduce是一个计算框架,表现形式是有个输入(input),mapreduce操作这个输入,通过本身定义好的计算模型,得到一个输出(output),也就是我们需要的结果. 在运行一个 ...
- kuangbin专题 数论基础 part1?
线段树专题太难了,那我来做数学吧! 但数学太难了,我......(扯 这两天想了做了查了整理了几道数学. 除了一些进阶的知识,像莫比乌斯反演,杜教筛,min25学不会我跳了,一些基础的思维还是可以记录 ...
- [ASP.NET Core 3框架揭秘] 配置[4]:将配置绑定为对象
虽然应用程序可以直接利用通过IConfigurationBuilder对象创建的IConfiguration对象来提取配置数据,但是我们更倾向于将其转换成一个POCO对象,以面向对象的方式来使用配置, ...
- OurEDA慕课网开发记录
项目说明 OurEDA实验室每年都会面向大一新生招人,每周的沙龙都会有学长来讲课,传经验,录下来的沙龙视频就非常有价值,因此,在老师的安排下,我负责开发了慕课网这样一个项目. 首要问题及其解决方案 视 ...
- 【每天一题】LeetCode 121. 买卖股票的最佳时机
开源地址:点击该链接 题目描述 * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock * 题目描述: * 给定一个数组, ...
- 剑指offer题解(Java版)
剑指offer题解(Java版) 从尾到头打印链表 题目描述 输入一个链表,按从尾到头的顺序返回一个ArrayList. 方法1:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
- 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(二)-应用模型类配合基架生成工具生成Razor页面
本节中,将学习添加用于管理跨平台的SQLLite数据库中的电影的类Movie.从ASP.NET core 模板创建的应用使用SQLLite数据库. 应用模型类(Movie)配合Entity Frame ...
- Nginx:The Location Block Selection Algorithm
Nginx:The Location Block Selection Algorithm,摘自NGINX:A PRACTICAL GUIDE TO HIGH PERFORMANCE Nginx配置文件 ...