java调用python脚本文件

本文介绍java调用python脚本文件,通过jython调用,通过实战案例介绍,直接调用python脚本文件方法和类对象。依赖jar版本jython-2.7.0.jar


python脚本文件:

#!/usr/bin/env python
# coding:utf-8

'''
Created on 2018年10月15日

@author: lzw
'''

class JavaPython(object):
    '''
    python 类
    '''
    
    def __init__(self, desc):
        
        self.desc = desc
        
    def outprint(self,info):
        
        return "%s:%s" % (self.desc,info)
    

def add(a,b):
    
    return a + b
        

java代码:

  • java环境类
package com.sinoiov.python;

import java.util.Properties;

import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;

public final class JythonEnvironment {
	
	private static JythonEnvironment INSTANCE = new JythonEnvironment();

	private JythonEnvironment() {

	}

	public static JythonEnvironment getInstance() {
		return INSTANCE;
	}

	public PySystemState getPySystemState() {
		
		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();
		
		PySystemState.initialize(preprops,props, new String[0]);
		final PySystemState py = new PySystemState();
		py.setClassLoader(getClass().getClassLoader());

		return py;
	}
	
	/** 
     * 获取python解释器 
     * @return PythonInterpreter 
     */ 
	public PythonInterpreter getPythonInterpreter() {
		PythonInterpreter inter = new PythonInterpreter(null, getPySystemState());

		return inter;
	}
}
  • 测试调用类
package com.sinoiov.python;

import org.python.core.Py;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class JavaPython {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JavaPython jp = new JavaPython();
		jp.run();
				
	}
	
	public void run() {
		// 获取python解释器
		final PythonInterpreter inter = JythonEnvironment.getInstance().getPythonInterpreter();
		// 解析python脚本文件
		inter.execfile("javapython.py");
		
		// 调用脚本文件方法
		// 调用方法
		PyFunction py = (PyFunction)inter.get("add",PyFunction.class);
					
		PyObject po = py.__call__(new PyInteger(3),new PyInteger(5));
		System.out.println( "3 + 2 ="+ po);
		
		// 调用类对象方法
		PyObject pyObject = (PyObject)inter.get("JavaPython", PyObject.class);
		// 初始化python类对象
		PyObject javaPythonObj = pyObject.__call__(Py.newStringOrUnicode("调用python"));
		// 反射调用对象outprint方法
		PyObject value = javaPythonObj.invoke("outprint",Py.newStringOrUnicode("调用成功"));
		
		System.out.println(value.asString());
	}
 
}
  • 测试结果
3 + 2 =8
调用python:调用成功

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值