#!/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方法的更多相关文章

  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. java基础-控制流程语句

    一 前言 周末睡觉好舒服,都不想动了,就想睡睡,晒晒太阳,作者劳碌命还是过来写文章了.基础系列文章已经已经出到控制流程,感觉也挺快的,我很自信全网没都多少系列文章能有我这基础系列写的这么好,易于初学者 ...

  2. 函数知识总结(js)

    c语言中函数的形参必须定义类型,而且形参的个数和实参的个数必须相等.但是在js中形参不需要定义,在函数定义的小括号中只需要写形参名就可以了不用写var关键字,而且在函数调用时传入的实参可以和形参的个数 ...

  3. 运算符副作用总结与例子(js)

    js中运算符副作用总结与例子 js中赋值运算符,递增递减运算符,delete运算符具有副作用,简单地说就是前后表达式的值会相互影响,除此之外其它的js运算符都没有副作用. 但函数表达式和对象创建表达式 ...

  4. SpringCloud-使用熔断器仪表盘监控熔断

    场景 SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  5. 基于Tomcat的GeoServer部署步骤

    一.安装JAVA 资源:JDK1.8 提取码:0y26 步骤: 1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置": 2. ...

  6. 微信公众号:Mysticbinary

    愿你有绝对自由.每周会写一篇哲学类文章.

  7. SpringBoot+Redis简单使用

    1.引入依赖 在pom.xml中加入 <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  8. CentOS 7上的主机名设置和基本网络管理

    主机名 CentOS 6 查看. # hostname 设置. # hostname NEW_NAME 设置完成后,xshell的会话中不会显示NEW_NAME,可通过重新登录会话来显示.不过实际上我 ...

  9. Java 8——重复注解和注解的作用范围的扩大化

    一.重复注解 在某些情况下,希望将相同的注解应用于声明或类型用途.从Java SE 8发行版开始,重复注解使可以执行此操作. 例如,正在编写代码以使用计时器服务,该服务使能够在给定时间或某个计划上运行 ...

  10. 大数据环境下mongoDB要加索引

    mongodb在存储大数据时,对查询的字段需要添加索引,我测试的是阿里云30多万的数据量,不加索引查询已经到8秒,而添加索引之后是毫秒级! 为集合加索引 mongodb支持内嵌属性添加索引 db.ag ...