java直接調用python腳本,並動態傳遞list參數


最近需要通過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 }

注:重點是紅色標記部分;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM