【问题标题】:calling python method through java ProcessBuilder()通过java ProcessBuilder()调用python方法
【发布时间】:2016-01-12 08:29:21
【问题描述】:

如何在 java 中使用ProcessBuilder 调用 Python 文件中的方法?我的 Python 文件有一个类和三个方法。另外,如何从 ProcessBuilder 设置我的 python 方法参数?

这是我的 Java 代码

public void con3(){
    try {
        ProcessBuilder pb = new ProcessBuilder("C:\\Python34\\python.exe", "D:\\New folder\\test\\src\\NewCodes\\pickel4output.py","may","vay");
        Process p = pb.start();
        System.out.println(p);
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";
        System.out.println("Running Python starts: " + line);
        int exitCode = p.waitFor();
        System.out.println("Exit Code : "+exitCode);
        line = in.readLine();
        System.out.println("First Line: " + line);
        while ((line = in.readLine()) != null){
            System.out.println("Python Output: " + line);
        }
    }
}

这是我的 Python 代码的一部分:

import pickle
class Test(object):

def pic(self,var1,var2):
    print(var1)
    print(var2)
    dic={}
    f=open('D:\\New folder\\test\\src\\NewCodes\\dicfile.pck','rb')
    dic=pickle.load(f)
    for record in range(4):
        dic=pickle.load(f)
        print(dic)
        dic.clear()

    f.close()

【问题讨论】:

    标签: java python


    【解决方案1】:

    我认为读取可执行文件(一系列二进制数)不会有任何好处。此外,Java 1.5 中的 java.lang.ProcessBuilder 类用于创建操作系统进程。相反,您应该使用 jython API:http://www.jython.org/javadoc/org/python/util/PythonInterpreter.html

    特别是:PyInstance 和 PythonInterpreter;

    【讨论】:

    • 感谢您的回答。但你知道一开始我使用的是 jython。但是我在使用 jython 时遇到了一些问题。 Jython 对导入 cpython 模块(即 cx_Oracle)的 python 脚本有问题。看这个:stackoverflow.com/questions/34578017/…
    • 您对导入cx_Oracle的问题有什么建议吗?我也不知道Pyinstance ......它是什么? @Mattsap
    • PyInstance 只允许您创建 python 类的实例。我对 cs_Oracle 没有任何经验。
    【解决方案2】:

    实际上,您不能从 ProcessBuilder 调用 Python 函数,但您可以创建一个 Python 程序,该程序从您的 Python 模块调用函数。而且您可以从 ProcessBuilder 作为命令运行它:

    python -c 'from pickel4output import pic; pic()'
    

    但是,请注意,由于您的 pic 函数需要一些参数,因此您必须创建一个 Python 代码,该代码从文件或命令行中读取这些参数,然后运行该函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多