簡體   English   中英

如何將數據從java傳遞給python腳本作為參數

[英]How to pass data from java to python script as parameter

我想從 java 類運行腳本。 我能夠用ProcessBuilder做到這一點。 現在我正在努力將數據作為參數傳遞給腳本。 我可以傳遞一個字符串,但我無法傳遞數據列表(從 CSV 文件讀取的數據)。 我嘗試過的一種方法是使用StringBuffer並將數據作為Bytes傳遞

    StringBuffer sb = new StringBuffer();
    ArrayList argsList = new ArrayList();

    // append the sb from record. 
    //convert it to bytes 
    //sb.toString() contains my data with a delimiter ';'

    // sb.toString().getBytes("UTF-8").toString()

    argsList.add(0,"Continuum/anaconda3/envs/sth/python");
    argsList.add(1,"python/test.py");
    argsList.add(2,"python/test.py");
    argsList.add(3,sb.toString().getBytes("UTF-8").toString())

    ProcessBuilder builder = new ProcessBuilder(argsList);

    Process p = builder.start();

我無法將sb.toString().getBytes("UTF-8")傳遞給流程構建器。 我得到java.lang.ArrayStoreException

另一方面,如果我通過sb.toString() ,我得到

java.io.IOException: Cannot run program Continuum/anaconda3/envs/sth/python, CreateProcess error=206, The filename or extension is too long
add it to list of commands to process builder. 

我如何閱讀我在 python 中傳遞的內容?

這甚至是傳遞數據(行 X 列)的正確方法嗎?

謝謝

您可以嘗試以下代碼::

import java.io.*;

class RunPythonCommand {
    public static void main(String [] args) {
        try {

            String prg = "import sys\nprint int(sys.argv[1])+int(sys.argv[2])\n";
            BufferedWriter out = new BufferedWriter(new FileWriter("sample_code.py"));
            out.write(prg);
            out.close();
            int param1 = 10;
            int param2 = 32;

            ProcessBuilder pb = new ProcessBuilder("python", "sample_code.py", "" + param2, "" + param1);
            Process p = pb.start();

            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            int ret = new Integer(in.readLine()).intValue();
            System.out.println("value is : " + ret);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

希望它會對你有所幫助

您可以將 args 作為數組傳遞。:

最終字符串 PYTHON = "python";

final String SCRIPT_PATH = new File("Pyscript.py").getPath();

final String ACTION = "-aexport";

最終字符串[] CMD_ARRAY = {PYTHON, SCRIPT_PATH, ACTION};

ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM