BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #50524同步于 2016/5/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

java调用python脚本遇到问题,有大神帮忙解决一下吗

su900527
2016/5/23镜像同步5 回复
项目想用java调用python脚本进行传参计算并返回结果。使用Jython.jar的PythonInterpreter类。 PythonInterpreter interpreter = new PythonInterpreter(); PySystemState sys = Py.getSystemState(); sys.path.add("pythonLib/Lib"); // interpreter.exec("import MAXREPEAT"); interpreter.exec("import json"); interpreter.execfile(is); // .py脚本 PyFunction func = (PyFunction) interpreter.get(funcName, PyFunction.class);// 脚本中函数名 PyObject pyobj = func.__call__(new PyString(jsonString)); // 函数返回值 遇到问题,需要把每一个模块路径添加进去,但是python脚本import json时报错了。jython跟python版本之间有啥要求吗,凌乱了 Python2.7.11版本 Jython2.5.3(没有json模块)与jython2.7.0(lib下有json模块)遇到问题不一样 2.5.3 模块里的模块报错 Traceback (most recent call last): File "<string>", line 1, in <module> File "pythonLib\Lib\json\__init__.py", line 108, in <module> from .decoder import JSONDecoder File "pythonLib\Lib\json\decoder.py", line 3, in <module> import re File "pythonLib\Lib\re.py", line 105, in <module> import sre_compile File "pythonLib\Lib\sre_compile.py", line 15, in <module> from sre_constants import * File "pythonLib\Lib\sre_constants.py", line 18, in <module> from _sre import MAXREPEAT ImportError: cannot import name MAXREPEAT 2.7.0报错如下 java.lang.IllegalArgumentException: Cannot create PyString with non-byte value at org.python.core.PyString.<init>(PyString.java:64) at org.python.core.PyString.<init>(PyString.java:70)
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
nuanyangyang机器人#1 · 2016/5/23
json模块是Python 2.6引入的。请确保你的jython兼容Python2.6。
nuanyangyang机器人#2 · 2016/5/23
【 在 su900527 的大作中提到: 】 : 项目想用java调用python脚本进行传参计算并返回结果。使用Jython.jar的PythonInterpreter类。 : PythonInterpreter interpreter = new PythonInterpreter(); : PySystemState sys = Py.getSystemState(); : ................... 另外,你有没有试图把官方Python的lib添加到jython的路径里?jython是一个完全独立的实现,你应该不需要任何从官方Python里弄来的东西才对。
su900527机器人#3 · 2016/5/23
是用的jython自己lib下的json,python2.7.11和jython2.7.0lib下都有json,但是会报错pythoninterpreter初始化问题,用低版本的jython由于没有json,但是pythoninterpreter不会报错。我比较菜了解的比较肤浅,谢大神指点 发自「贵邮」
nuanyangyang机器人#4 · 2016/5/23
http://bugs.jython.org/issue2331 这个有帮助吗?这是个bug,在jython2.7.1里修复了。
nuanyangyang机器人#5 · 2016/5/23
另外,可以问问为什么要在Java里调用Python脚本呢?总觉得整体系统的设计有哪点儿不对。为什么选用了Java+Python这样古怪的组合呢? Jython有点像个几乎停滞了的项目,只支持2.7,但Python早就进入3.x时代了。而且Jython也不像JRuby那样能用Truffle+Graal进行大量的“特殊化”以加速动态语言的执行。