有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java应用程序中执行单独的python应用程序

我有一个小型java项目,它可以执行包括数据库更新在内的多项活动,我还有一个单独的python(.py)应用程序,可以在数据挖掘过程之后更新同一个数据库。在我的Java应用程序中,我需要打开(执行)我的python应用程序来更新同一个数据库。我尝试了几种方法,但代码不起作用。下面我粘贴了初始代码,没有调用。py文件

 if (getDB("BP") != 0.0 && getDB("BT") != 0.0 &&
     getDB("SO2") != 0.0 && getDB("HR") != 0.0) {
             if(analyzeData(inputLine)) {
                setDB(inputLine);
        //<python(.py) file should execute independently in this section, after setDB(inputLine)>
             } } 
             else { 
                  setNormalBio(inputLine); 
                  }

共 (1) 个答案

  1. # 1 楼答案

    我没有看到任何与从java代码生成新进程相关的内容。你真的调查过这个话题吗?如果不是:不要期望下面的代码是一流的解决方案。也许可以更深入地研究一下http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html和python文档,正如我记得的,当我在PHP上做这件事时,python代码本身遇到了一些问题


    Python(deadparrot.py):

    from os import chdir, name as osname
    from os.path import dirname, abspath
    
    def voom():
        if osname == 'posix':
            chdir(dirname(abspath(__file__)))
        return "Testing! This is your nine o'clock alarm call!"
    
    if __name__ == '__main__':
        print voom()
        exit(0)
    

    我不确定chdir的电话。有一次我得到了一个项目,在这个项目中,我需要在linux Web服务器环境中使用php调用python(因此称为“posix”),并在python脚本中使用相对路径进行操作。IIRC我在本地windows环境下测试时不需要它

    编辑1:我在Windows 7中测试了它。看起来两样都不是。目录(…)或chdir(…)需要从python脚本调用相对路径。IDK关于linux

    关于“___”条件。我使用它,因为这样我仍然可以从java应用程序调用脚本(exit(0)在unix术语中返回ok),此外还可以使用另一个python脚本中的voom()函数,如下所示:

    from deadparrot import voom
    
    voom()
    


    爪哇:

    package test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class TestJavaAppClean {
    
        public static void main(String[] args) {
            ProcessBuilder pb = null;
            Process p = null;
            BufferedReader br = null;
    
            try {
                String top = "C:\\Users\\MaxMueller\\Documents\\test\\";
                String cmd = "C:\\Python27\\python.exe";
                String arg = "deadparrot.py";
                pb = new ProcessBuilder(new String[]{cmd, top + arg});
                pb.directory(new File(top));
                p = pb.start();
                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (Exception ex) {
    
            } finally {
                try {
                    if (br != null) {
                        br.close();
                    }
                } catch (IOException ex) {
                }
                if (p != null) {
                    p.destroy();
                }
            }
        }
    }