最简单的python调用Java程序(仅用os包)

前言

    项目中的数据有分库分表,用到的是Java实现的一致性Hash算法。而我抓数据使用的是python,在Java中用到了Java中自带的hashCode方法,所以两边算出来的分库和分表结果可能会不同。所以,只好用python调用Java了,但是我只需要用到一个类的一个静态方法罢了,引入了框架调用什么的太麻烦。就像之前我用python中的os包的system方法直接调用jar包运行一样。
    总体思路还是通过python中的os包来完成。

实现

  1. 编写Java文件,并将其编译成class文件。
    JumpHashCode.java
public class JumpHashCode{
	public static void main(String[] args){
		// 参数校验
		if(args.length < 2){
			System.out.println("缺少参数, 至少要两个参数");
		} else {
			// 注意不要使用println,不然python那会发现多个\n
			System.out.print(jumpConsistentHash(args[0], Integer.valueOf(args[1])));
		}
	}
	
	/**
	* @param key 分片键
	* @param number 节点数量
	*/
	public static int jumpConsistentHash(String key, int number){
	......
	}
}

// 设置用utf-8编译
编译: javac -encoding utf-8 JumpHashCode.java
运行测试: java JumpHashCode BeryAllen 11
测试完成,将class文件放到python项目中
2. python调用并且获取输出的值

def jump_hash(data, number)
	"""
	获取一致性hash的结果
	:param data: 用于分片的列
	:param number: 要分成几个节点
	:return 0 ~ number-1
	"""

	r = os.popen("java JumpHashCode %s %s" % (data, number))
	text = r.read()
	r.close()
	return text

大功告成。

你可能感兴趣的:(Python,Java,java,python)