如何在java中使用to string方法,如何在java中使用命令行

  如何在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_cryptlinux上可以通过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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: