如何在java中使用to string方法,如何在java中使用命令行
目录
一、Jython是什么二、使用步骤1.引入依赖2.调用代码2.python脚本三、问题1.报错:import error : nomodulenamedpasslib 2 .报错:CannotcreatePyStringwithnon非字节值前言:
由于项目中需要用到爪哇调用大蟒的脚本,来实现一些功能,就对工具做了一些了解,通过工具可以实现爪哇岛对大蟒脚本的调用。
一、Jython是什么
Jython是大蟒的纯爪哇实现。她无缝地结合了爪哇类与Python,使用户能以大蟒语言的语法编写在爪哇虚拟机上运行的软件。它的特点有:与相似的爪哇程序相比,Jython极大的的减少了编程代码量脚本语言同时拥有解释器和编译器,使其无需编译就可以测试程序代码。
二、使用步骤
1.引入依赖
代码如下(示例):
依赖关系groupIdorg.python/groupId人工制品有限公司独立/artifactId版本2 .7 .0/版本/依赖关系
2.调用代码
//功能:从消息中找出对应的加密后的数据,加密算法是hash.md5_crypt //原始数据ListString word=new ArrayList();词。add( 123 );词。add( 456 );//加密后数据ListString crypt world=new ArrayList();暗语。添加$1$KP 074 k5l$gkgfzvwbym 0 fqt 4 l .KLoh/);暗语。添加$ 1 $ ZT xoz 1 fl $ HKSbEyNFHGkLgAHZUTjmz .);string python文件路径= jython _ test。py ;string python文件方法= verifyPythonInterpreter解释器=新的python解释器();类路径资源resource=新的类路径资源(python文件路径);InputStream输入流=资源。getinputstream();翻译。execfile(inputStream);py函数验证=解释器。get(python文件方法,py函数。类);//调用PyObject pyObject=verify .__call__(new PyList(word),new PyList(crypt word));ListString result=(ListString)p对象._ _ to Java _ _(列表。类);System.out.println(结果);翻译。close();输出结果:
[word:456,crypt _ word :1 11kp 074 k5l $ gkgfzvwbym 0 fqt 4 l .KLoh/, word:123,crypt _ word :1 11ztxoz 1 fl $ HKSbEyNFHGkLgAHZUTjmz ]
2.python脚本
从passlib.hash导入md5_cryptdef验证
(word,crypt_word): result=[] for crypt_w in crypt_word: for w in word: if md5_crypt.verify(w, crypt_w): item = word:{}, crypt_word:{}.format(w,crypt_w) result.append(item) break return result
三、问题
1.报错:ImportError: No module named passlib
报错提示说没有安装passlib库,则需要导入passlib库,才能使用from passlib.hash import md5_crypt
linux上可以通过pip install passlib
命令安装windows:例如可以使用spyder执行pip install passlib安装如果安装后还是报错,则可能是由于库安装路径不在path里,需要在脚本里引入安装路径,例如:
import syssys.path.append(‘D:toolsAnacondalibsite-packages)
或通过代码的方式引入:
interpreter.exec(“import sys”);interpreter.exec(“sys.path.append(‘D:toolsAnacondalibsite-packages)”);
2.报错:Cannot create PyString with non-byte value
在源码中可以找到报错的地方:
public PyString(PyType subType, String string) { super(subType); if (string == null) { throw new IllegalArgumentException("Cannot create PyString from null"); } else if (!isBytes(string)) { throw new IllegalArgumentException("Cannot create PyString with non-byte value"); } this.string = string; }
再进入 isBytes(string) 方法:
private static boolean isBytes(String s) { int k = s.length(); if (k == 0) { return true; } else { char c = 0; // 每次循环计算8次 while (k > 8) { c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); c = s.charAt(--k); } // 计算最后剩下的不足8次的 while (k > 0) { c = s.charAt(--k); } // 比较大小 return c < 0x100; } }
该方法是对传进来的字符串进行每个字符的求或运算,最终结果要小于 0x100,也就是256,也就是说每个字符的大小是不能超过256的。而我这里报错的原因是在创建PythonInterpreter
时传入的python文件路径里带了中文。
到此这篇关于如何在java中使用Jython的文章就介绍到这了,更多相关在java中使用Jython内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。