Python基于pyjnius库实现访问java类


Posted in Python onJuly 31, 2020

简介

Pyjnius是一个用于访问Java类的Python库。

适用场景:极个别的加密算法等内容,用python不方便实现或者实现较耗时,可基于Pyjnius把java类当做python库使用。

文档:http://pyjnius.readthedocs.io/en/latest/installation.html

下载地址:https://pypi.python.org/pypi?%3Aaction=search&term=jnius&submit=search

注意jnius的版本管理有点混乱,目前看来选择jniusx比较好。

git地址:https://github.com/kivy/pyjnius/blob/master/docs/source/index.rst

安装

先安装Java JDK 和JRE、Cython

#
pip3 install cython
# pip3 install jniusx
Collecting jniusx
Downloading jniusx - 1.0.5. tar.gz
Requirement already satisfied: six >=
	1.7.0 in /opt/python
3.5 / lib / python3.5 / site - packages(
	from jniusx)
Requirement already satisfied: cython in
	/opt/python
3.5 / lib / python3.5 / site - packages(
	from jniusx)
Installing collected packages: jniusx
Running setup.py install
for jniusx...done
Successfully installed jniusx - 1.0.5

注意:jnius安装的坑比较多,请参考http://stackoverflow.com/search?q=jnius

如果出现ImportError,一般是java环境变量或者path没有配置好。

jnius/jnius.c:4:20: fatal error: Python.h 一般为缺python-dev, yum -y install python-devel

pip 安装不成功可以尝试 setup.py方式。

jnius/jnius.c: No such file or directory 需要利用原来保存的clone。

快速入门

hello world 实例:

#!/usr/bin/env python

#- * -coding: utf - 8 - * -
	#jnius_quick2.py
# Author Rongzhong Xu 2016 - 08 - 02 wechat:
	pythontesting
# https: //bitbucket.org/china-testing/python-chinese-library/src
	""
"
jnius demo
Tested in python2.7
	""
"
from jnius
import autoclass
System = autoclass('java.lang.System')
System.out.println('Hello World')

堆栈实例:

#!/usr/bin/env python

#- * -coding: utf - 8 - * -
	#jnius_quick1.py
# Author Rongzhong Xu 2016 - 08 - 02 wechat:
	pythontesting
# https: //bitbucket.org/china-testing/python-chinese-library/src
	""
"
jnius demo
Tested in python2.7
	""
"
from jnius
import autoclass
Stack = autoclass('java.util.Stack')
stack = Stack()
stack.push('hello')
stack.push('world')
print(stack.pop())# -- > 'world'
print(stack.pop())# -- > 'hello'

调用java String的hashCode

#!/usr/bin/env python

#- * -coding: utf - 8 - * -
	#jnius_quick3.py
# Author Rongzhong Xu 2016 - 08 - 02 wechat:
	pythontesting
# https: //bitbucket.org/china-testing/python-chinese-library/src
	""
"
jnius demo: Call java String 's hashCode
Tested in python2.7
	""
"
from jnius
import autoclass
String = autoclass('java.lang.String')
print(String("hello").hashCode())

调用jar包

#!python

#
vi com / sample / Beach.java
package com.sample;
public class Beach {
	private String name;
	private String city;
	public Beach(String name, String city) {
		this.name = name;
		this.city = city;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
}
#
echo Main - Class: Beach > manifest.txt
# jar cvfm Test.jar manifest.txt com /
	sample /*.class*/

测试:

#!python

#
ipython
Python 3.5.2(
	default, Nov 7 2016, 18: 53: 51)
Type "copyright", "credits"
or "license"
for more information.
IPython 5.1.0--An enhanced Interactive Python
	.
? - > Introduction and overview of IPython
	's features.
% quickref - > Quick reference.
help - > Python 's own help system.
object ? - > Details about 'object',
	use 'object??'
for extra details.
In[2]: #注意要先把jar加载CLASSPATH环境变量。
In[3]: from jnius
import autoclass
In[4]: Bla = autoclass(
	'com.sample.Beach')
In[5]: s = Bla("Tom", "Shenzhen")
In[6]: s.getName()
Out[6]: 'Tom'
``
`

封装某模块的加密机制为python包实例:

* 拷贝: com cn org 到新建的临时目录

* echo Main-Class: AESUtil >manifest.txt

* jar cvfm Test.jar manifest.txt *

测试代码:

`
``
python
# - * -coding: utf - 8 - * -
	#注意要先把jar加载CLASSPATH环境变量。
from jnius
import autoclass
AESUtil = autoclass(
	'com.oppo.sso.util.AESUtil')
email = AESUtil.aesEncrypt(
	"hello@126.com", "我是一个加密密钥")
print(email)# !python
# ipython
Python 3.5.2(
	default, Nov 7 2016, 18: 53: 51)
Type "copyright", "credits"
or "license"
for more information.
IPython 5.1.0--An enhanced Interactive Python
	.
? - > Introduction and overview of IPython
	's features.
% quickref - > Quick reference.
help - > Python 's own help system.
object ? - > Details about 'object',
	use 'object??'
for extra details.
In[2]: #注意要先把jar加载CLASSPATH环境变量。
In[3]: from jnius
import autoclass
In[4]: Bla = autoclass(
	'com.sample.Beach')
In[5]: s = Bla("Tom", "Shenzhen")
In[6]: s.getName()
Out[6]: 'Tom'
``
`

封装某模块的加密机制为python包实例:

* 拷贝: com cn org 到新建的临时目录

* echo Main-Class: AESUtil >manifest.txt

* jar cvfm Test.jar manifest.txt *

测试代码:

`
``
python
# - * -coding: utf - 8 - * -
	#注意要先把jar加载CLASSPATH环境变量。
from jnius
import autoclass
AESUtil = autoclass(
	'com.oppo.sso.util.AESUtil')
email = AESUtil.aesEncrypt(
	"hello@126.com", "我是一个加密密钥")
print(email)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
在Python中使用gRPC的方法示例
Aug 08 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
python获取txt文件词向量过程详解
Jul 05 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
详解Python yaml模块
Sep 23 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 Python
Python如何将字符串转换为日期
Jul 31 #Python
Python在字符串中处理html和xml的方法
Jul 31 #Python
python中selenium库的基本使用详解
Jul 31 #Python
Python过滤序列元素的方法
Jul 31 #Python
python中的django是做什么的
Jul 31 #Python
如何基于python把文字图片写入word文档
Jul 31 #Python
django教程如何自学
Jul 31 #Python
You might like
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
学习jQuey中的return false
2015/12/18 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
js倒计时显示实例
2016/12/11 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python万年历实现代码 含运行结果
2017/05/20 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
django-filter和普通查询的例子
2019/08/12 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
汽车检测与维修个人求职信
2013/09/24 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
学生个人自我鉴定
2014/03/26 职场文书
师恩难忘教学反思
2014/04/27 职场文书
企业员工薪酬方案
2014/06/04 职场文书
车辆转让协议书
2014/09/24 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
职工的安全责任书范文!
2019/07/02 职场文书