cuijxin 发表于 2015-08-12 11:28

java调用Python,需要向python脚本里传参数

java 调用python脚本 需要向脚本里传一个二进制数组作为参数 有什么解决方案可以选择?

我现在是用“Process pr = Runtime.getRuntime().exec("example.py");”的方法,但是用命令行参数的方式没法子传java的二进制数组给python啊,请问该怎么办啊?

renxiao2003 发表于 2015-08-12 13:04

可以吧。具体的我调查一下,给你写个DEMO。

renxiao2003 发表于 2015-08-12 13:23

static void runprocess() throws IOException, InterruptedException {
                // ProcessBuilder p = new ProcessBuilder("cmd /c dir c:\\", "/b");
                String[] args = new String[] {"cmd","/c","dir","c:\\", "/b" };
                Process process = Runtime.getRuntime().exec(args);
                InputStream inputStream = process.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                String line;
                try {
                        while ((line = bufferedReader.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }我写的,执行的是DOS的DIR命令,换成你的PYthon代码应该差不多。

renxiao2003 发表于 2015-08-12 13:30

static void runpython() throws IOException, InterruptedException {
                String[] args = new String[] {"youpath2python\\python.exe","youscriptpath\\test.py","a","b", "c","d" };
                Process process = Runtime.getRuntime().exec(args);
                InputStream inputStream = process.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                String line;
                try {
                        while ((line = bufferedReader.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }test.py的内容如下:import sys
print "script name:", sys.argv
for i in range(1, len(sys.argv)):
    print "Parameter:", i, sys.argv
显示参数

cuijxin 发表于 2015-08-12 16:51

多谢,我试一下您的这种方法
但是我要传的二进制数组实际上是从文件中读取出的二进制流,因为种种原因,不能将文件名传给python脚本,只能由java先读取文件,然后再将二进制流传递给python脚本,最终,python处理完的数据也要以二进制流的形式传递回java程序,而且,这个文件的二进制流可能很大,这么做会不会有问题啊?

renxiao2003 发表于 2015-08-13 11:18

回复 5# cuijxin


    为什么非要在Python中做文件处理。直接在JAVA中做呗。不行你就直接在Python中处理文件,别处理流了(Python中能处理文件吗?)。
页: [1]
查看完整版本: java调用Python,需要向python脚本里传参数