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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
Django中使用locals()函数的技巧
Jul 16 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
python 写一个性能测试工具(一)
Oct 24 Python
python boto和boto3操作bucket的示例
Oct 30 Python
python for循环赋值问题
Jun 03 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修改NetBeans默认字体的大小
2013/07/02 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python手机号码归属地查询代码
2016/05/04 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
python对execl 处理操作代码
2020/06/22 Python
运行Python编写的程序方法实例
2020/10/21 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
js实现弹框效果
2021/03/24 Javascript
纠风工作实施方案
2014/03/15 职场文书
社会实践评语
2014/04/28 职场文书
元旦趣味活动方案
2014/08/22 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
拾金不昧表扬信
2015/01/16 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技