• 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、编写如下测试代码;

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

    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:***jython2.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

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/liinux/p/5481849.html
Copyright © 2020-2023  润新知