温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java程序中怎么实现调用Python脚本

发布时间:2021-04-14 10:06:27 来源:亿速云 阅读:276 作者:小新 栏目:编程语言

这篇文章将为大家详细讲解有关Java程序中怎么实现调用Python脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法。

1、在Eclipse中新建Maven工程;

2、pom.xml文件中添加如下依赖包之后update maven工程;

<dependency>   <groupId>org.python</groupId>   <artifactId>jython</artifactId>   <version>2.7.0</version> </dependency> <dependency>   <groupId>org.python</groupId>   <artifactId>jython-standalone</artifactId>   <version>2.7.0</version> </dependency>

3、编写如下测试代码;

import org.python.util.PythonInterpreter; public class JpythonScript {  public static void main(String args[]) {   PythonInterpreter interpreter = new PythonInterpreter();   interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");   interpreter.exec("print days[1];");  } }

4、测试:

出现如下错误:

console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.
Exception in thread "main" ImportError: Cannot import site module and its dependencies: No module named site
Determine if the following attributes are correct:
  * sys.path: ['...python\\jython\\2.7.0\\Lib', '__classpath__', '__pyclasspath__/']
    This attribute might be including the wrong directories, such as from CPython
  * sys.prefix:***\jython\2.7.0
    This attribute is set by the system property python.home, although it can
    be often automatically determined by the location of the Jython jar file
You can use the -S option or python.import.site=false to not import the site module

5、问题解决:

重构代码如下:

import java.util.Properties; import org.python.util.PythonInterpreter; public class JpythonScript {  public static void main(String args[]) {   Properties props = new Properties();   props.put("python.home", "path to the Lib folder");   props.put("python.console.encoding", "UTF-8");   props.put("python.security.respectJavaAccessibility", "false");   props.put("python.import.site", "false");   Properties preprops = System.getProperties();   PythonInterpreter.initialize(preprops, props, new String[0]);   PythonInterpreter interpreter = new PythonInterpreter();   interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");   interpreter.exec("print days[1];");  } }

6、编译成功。

7、解决问题参考:

http://bugs.jython.org/issue2355

补充:jpython抛错Cannot import site module的解决方法

Exception in thread "main" ImportError: Cannot import site module and its dependencies: No module named site

public class JpythonScript {   public static void main(String args[]) {     Properties props = new Properties();     props.put("python.import.site", "false");     Properties preprops = System.getProperties();     PythonInterpreter.initialize(preprops, props, new String[0]);     PythonInterpreter interpreter = new PythonInterpreter();     interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");     interpreter.exec("print days[1];");   }
// 进行复杂类接受处理 Map<String, Object> res = new HashMap<String, Object>(); res.put("1", "Danny"); res.put("2", "Fanny"); PythonInterpreter interpM = new PythonInterpreter(); interpM.execfile("./src/com/DataDeal.py"); PyFunction pyFunctionM = (PyFunction) interpM.get("main", PyFunction.class); Map<PyObject, PyObject> tableM = new HashMap<PyObject, PyObject>(); tableM.put(new PyString("conf"), PyJavaType.wrapJavaObject(res)); PyDictionary pydM = new PyDictionary(tableM);

关于“Java程序中怎么实现调用Python脚本”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI