最近需要通过java代码传递list参数给python进行数据的处理,因此,查找了一些资料,并结合自己的需求做了一个demo,现在进行一下总结。
1. python代码
1 import sys 2 import numpy as np 3 4 if __name__ == '__main__': 5 list = [] 6 for i in range(1, len(sys.argv)): 7 list.append(sys.argv[i].replace(",","")) 8 # 根据个人数据进行处理 9 list[0] = list[0].replace("[","") 10 list[len(sys.argv)-2] = list[len(sys.argv)-2].replace("]", "") 11 # 构建矩阵,测试第三方包的调用 12 b =[[i for x in range(4)] for i in range(1, len(sys.argv))] 13 b1 = np.mat(b) 14 print(b1) 15 print(b1.shape) 16 print(list)
注:循环为什么要从1开始?由于sys.argv[0]存储的是py文件自身的路径,因此接受参数从sys.argv[1]开始。
2. java代码
1 package com.ob.javatopython; 2 3 import java.io.BufferedReader; 4 import java.io.InputStreamReader; 5 import java.util.ArrayList; 6 7 public class ToPythonClass { 8 public void ToPython(ArrayList<String> list) { 9 try { 10 Process pr = Runtime.getRuntime().exec( 11 "E:\\python3\\python.exe F:\\javaTopython\\linkPython.py " 12 + list); 13 BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); 14 String line; 15 while ((line = in.readLine()) != null) { 16 System.out.println("line:" + line); 17 } 18 in.close(); 19 pr.waitFor(); 20 } catch (Exception e) { 21 e.printStackTrace(); 22 } 23 } 24 }
注:重点是红色标记部分;