最近需要通過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 }
注:重點是紅色標記部分;