java调用python函数

java调用python函数

  项目中需要调用python编写的算法函数,需要在java工程中对py文件进行调研。在网上查到的资料大多数是使用jython。但是发现如果在python中引用其他包需要提前导入。
  本方法参考Java代码中调用shell脚本和python脚本并获得输出结果(分为小数据量和大数据量),采取捕捉控制台输出的方法偷懒实现对python函数的调用。

python函数

用于测试的python函数如下:

import sys

def test(a,b):
  if a>b:
    print(True)
    return True
  else:
    print(False)
    return False

if __name__ == '__main__':
  print(sys.argv)
  test(int(sys.argv[1]),int(sys.argv[2]))

cmd测试

cmd命令

$ python e:\test.py 3 4

cmd输出

['e:\test.py', '3', '4']
False

其中sys.argv[index]用于获取控制台输入,包括文件名,因此参数index从1开始。

java函数

在java中捕捉控制台输出,也有用InputStream捕捉控制台输出的,本人未实现。

//代码原址参考引用,还有大量输出的多线程方法
public String python(String pythonPath, String[] params) {
        File file = new File(pythonPath);
        if (!file.exists()){
            return "python脚本不存在!";
        }

        String[] command = Arrays.copyOf(new String[]{"python", pythonPath}, params.length + 2);
        System.arraycopy(params, 0, command, 2, params.length);

        List<String> res = new ArrayList<>();
        try {
            Process process = Runtime.getRuntime().exec(command, null, null);
            process.waitFor();

            Scanner scanner = new Scanner(process.getInputStream());
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                res.add(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return "success";
    }

经过测试,res成功输出与控制台相同内容。
当可以在python函数的return前print函数返回值,res的最后一行即为输出。

参考

  1. Java代码中调用shell脚本和python脚本并获得输出结果(分为小数据量和大数据量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值