Java系列:Java调用python程序

本文展示了如何使用Java程序调用Python脚本,包括无参数调用、传递参数以及接收Python程序的输出结果。通过Runtime类的exec方法执行Python脚本,并读取其标准输出,实现了Java与Python的交互。示例中,Python脚本使用numpy库生成随机数组并打印,Java程序则根据传入的参数动态调整数组大小。
摘要由CSDN通过智能技术生成

1. 任务

调用已有的 demo.py 程序:

在这里插入图片描述

程序内容:

import numpy as np

arr = np.array([[1,2],[3,4]])
print("arr:",arr)

2. Java 调用python程序

package leetCode;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestPythonCode {
	public static void main(String[] args) {
		Process proc;
		try {
			proc = Runtime.getRuntime().exec("python F://JavaWorkShop/leetCode/src/demo/demo.py");
			BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			String line = null;
			while ((line = in.readLine()) != null) {
				System.out.println(line);
			}
			in.close();
			proc.waitFor();
					
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

效果:

arr: [[1 2]
 [3 4]]

3. 带实参的调用python程序

这是调用的python程序demo.py

import numpy as np
import sys
def print_arr(shape=None):
	#print(tuple(shape))
	arr = np.random.random(size=tuple(shape))
	print("arr:",arr)



if __name__ == "__main__":
	params = []
	for i in range(1,len(sys.argv)):
		params.append((int(sys.argv[i])))
	#print(params)
	print_arr(params)

java程序:

package leetCode;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestPythonCode {
	public static void main(String[] args) {
		Process proc;
		try {
			
			int a = 3;
			int b = 1;
			String[]  execArgs = new String[] { "python", "F://JavaWorkShop/leetCode/src/demo/demo.py", String.valueOf(a), String.valueOf(b) };
			proc = Runtime.getRuntime().exec(execArgs);
			
			BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			String line = null;
			while ((line = in.readLine()) != null) {
				System.out.println(line);
			}
			in.close();
			proc.waitFor();
					
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

效果:

arr: [[0.23132626]
 [0.90098341]
 [0.26998795]]

参考:

  1. Java调用Python程序方法总结(最全最详细)
  2. 如何用Java程序运行Python文件,python;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosefunR

你的赞赏是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值