简体   繁体   English

如何将数据从java传递给python脚本作为参数

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

I wanted to run a script from java class.我想从 java 类运行脚本。 I was able to do it with ProcessBuilder .我能够用ProcessBuilder做到这一点。 Now I am struggling to pass data as an argument to the script.现在我正在努力将数据作为参数传递给脚本。 I can pass a string, but I am having trouble passing list of data (data read from a CSV file).我可以传递一个字符串,但我无法传递数据列表(从 CSV 文件读取的数据)。 One that I tried was using StringBuffer and passing the data as Bytes我尝试过的一种方法是使用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();

I can not pass sb.toString().getBytes("UTF-8") to the process builder.我无法将sb.toString().getBytes("UTF-8")传递给流程构建器。 I get java.lang.ArrayStoreException我得到java.lang.ArrayStoreException

On the other hand, if I pass sb.toString() , I get另一方面,如果我通过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. 

How can I read what I passed in python?我如何阅读我在 python 中传递的内容?

Is this even the right way to pass data ( row X column)?这甚至是传递数据(行 X 列)的正确方法吗?

Thanks谢谢

You can try below code :: 您可以尝试以下代码::

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);
        }
    }
}

Hope it will help you 希望它会对你有所帮助

You can pass args as array.:您可以将 args 作为数组传递。:

final String PYTHON = "python";最终字符串 PYTHON = "python";

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

final String ACTION = "-aexport"; final String ACTION = "-aexport";

final String[] CMD_ARRAY = {PYTHON, SCRIPT_PATH, ACTION};最终字符串[] CMD_ARRAY = {PYTHON, SCRIPT_PATH, ACTION};

ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY); ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将数据从Java小程序传递到客户端python脚本? - How to pass data from Java applet to client side python script? 如何使用用于从Java执行python脚本的Process调用将StringBuilder中的不同值作为单独的参数传递 - How to pass different values in a StringBuilder as separate parameter with a Process call for executing python script from Java 如何将java参数传递给python,从Java调用Python代码 - How to pass the java parameter to python , Call Python code from Java 如何在Java程序中将参数传递给Shell脚本 - How to pass parameter to shell script in java program 如何正确地从bash脚本向java应用程序传递数据 - How to pass data to java application from a bash script correctly 如何将日期从 shell 脚本传递到 java 即时数据类型 - How to pass date from shell script to java Instant data type 如何在使用ScriptEngine从Java运行python脚本的同时调用python脚本内的函数并传递参数 - How to call a function inside a python script and pass parameters while using ScriptEngine to run python script from Java 如何从外壳程序脚本以String格式将文件的内容作为参数传递给java方法? - How to pass the contents of the file in String format as a parameter to a java method from shell script? 需要将 Arraylist 从 java 程序传递给 R 脚本作为参数 - Need to pass Arraylist from java program to R script as a parameter 如何将参数从jsp传递给java类? - How to pass a parameter from jsp to java class?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM