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

标签 java python parameter-passing

我想从 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);
        }
    }
}

希望对你有帮助

关于java - 如何将数据作为参数从java传递到python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969653/

相关文章:

python - 是否存在与 FlyCapture API 的现有 python 绑定(bind)?

python - 没有函数与给定名称和参数类型匹配 - PGCrypto

c# - 在 C# 中按引用或值传递对象

python - 如何检查列表的元素是否是列表(在 Python 中)?

vba - Excel VBA - 将参数传递给函数

c - 我应该如何将此整数数组传递给这个函数?

java - @Cacheable注解在服务实现中放置的理想位置是什么?

java - 如何获取引导类加载器加载的所有类的列表?

java - 如何用更少的内存提高字符串处理的性能?

java - 英语词典的熵