Java调用python传参数并获取python返回的值

python 作为一种较为简洁的语言,虽然其也具有面对对象的特性,但,身边用这方面的小伙伴真的不咋多,不说新星 Go了,Java它都追不上,毕竟开发环境和生态决定了很多东西。But,python庞大的库资源,以及简洁的语言风格还是深受很多人的喜爱,再者赶上了AI的好时代,感觉大家都在学。But,做应用开发时偶尔还是需要使用python来做些东西,所以Java
怎么调用Python呢?

直接上代码,边看别边,相信看完你就会这套流程了,真不懂可以留言,但我更希望是大佬你的指导!

以windows平台为例:(我用的windows Server,不敢说Linux 完全行)
翻出以前代码直接改的,有些变量命名可读性不适合这里,请不要介意!
1、确定本机安装python环境

我相信你有!

2、Java调用Python并传递参数

// ===========================  抽象类 包含调用Python以及获取返回值的方法!==================
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public abstract class JavaToPy {
    public static void getFile(String filename) throws IOException, InterruptedException {
        String param =filename;
        String[] command = new String[] {"python","D:/test.py",param};
        final Process process = Runtime.getRuntime().exec(command);
        printMessage(process.getInputStream());
        printMessage(process.getErrorStream());
    }
    private static void printMessage(final InputStream input) {
        new Thread(new Runnable() {
            public void run() {
                Reader reader = new InputStreamReader(input);
                BufferedReader bf = new BufferedReader(reader);
                String line = null;
                try {
                    while((line=bf.readLine())!=null) {

                        System.out.println(line); // 返回值 
                    }
                    reader.close();
                    bf.close();
                } catch (IOException e) {

                    e.printStackTrace();

                }

            }
        }).start();
    }
}
// =============================== 主函数 调用上面抽象类的方法===========================
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        JavaToPy.getFile("Hello Java! I am Python"); // 我给 python传递的参数! 
        }
    }

3、python 接收返回值
我们来看看python文件的内容

import sys
# 注意啦!
#第一种
#dataforJava1 = sys.argv[0:1] # 获取到的Java传递的内容: Python文件绝对地址 + 参数 
#print("Java,I am Python  "+"your passage is : "+str(dataforJava1))
#第二种
dataforJava2 = sys.argv[1:] # 获取到的python的参数
print("Java,I am Python  "+"your passage is : "+str(dataforJava2))

4、我们看看Java获取的返回值

// dataforJava1 第一种
Java,I am Python  your passage is : ['D:/test.py', 'Hello Java! I am Python']
// dataforJava2 第二种
Java,I am Python  your passage is : ['Hello Java! I am Python']

5、用处
传递你想传递的一切,有时间我再测试Linux下的使用!

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值