以编程方式从java调用Linux终端中的python脚本

时间:2016-01-14 07:03:26

标签: java python linux terminal processbuilder

我正在开发一个Java应用程序,用于检查源文件中的补丁(如果有或没有)。用于检测补丁更改的核心逻辑存在于python脚本[标题为' patch.py​​']中,我的Java应用程序与此Python补丁脚本通信以检索操作的退出状态。

可以从here

获取python脚本

在Windows中,它工作正常,但在Linux环境中。脚本本身不会从Java应用程序调用。我不确定我哪里出错了。

我正在使用' ProcessBuilder'用于调用python脚本和源代码如下:

if (System.getProperty("os.name").indexOf("Windows") != -1) {

            ArrayList<String> command = new ArrayList<String>();
            //Cmd prompt will be launched, if platform is Windows.
            command.add("cmd");
            command.add("/c");
            command.add("python");

            command.add("lib/patch.py");
            command.add("-d");
            command.add(auxSrcFile);
            command.add(diffFileLoc);
            command.add("--revert");   // switch to revert the patch

            pb = new ProcessBuilder(command);
        } else {
            ArrayList<String> command = new ArrayList<String>();
            //xterm will be launched, if platform is Linux.
            command.add("xterm");
            command.add("-e");
            command.add("python");
            command.add("lib/patch.py");
            command.add("-d");
            command.add(auxSrcFile);
            command.add(diffFileLoc);
            command.add("--revert");    // switch to revert the patch

            pb = new ProcessBuilder(command);
        }

        if (pb != null) {

            p = pb.start();                         
            if (p != null) {
                p.waitFor();
            }
        }   
        int exitStatus = p.exitValue();
        if(exitStatus == 1) {
            System.out.println("...OK");
            System.out.println(" ----Patch detected------");    
        } else {
            System.out.println("...ERROR");
            System.out.println(" ----Patch not found------");
        }

如果在Windows中运行Java应用程序,则正在调用python脚本,而如果我在Linux环境中运行该应用程序,则会失败。

欢迎提出建议!!

注意:我可以运行&#39; patch.py​​&#39;脚本独立(在Linux终端中)但是当我试图从我的Java应用程序调用它时,我无法调用它并始终获得退出值&#39; 0&#39;。

1 个答案:

答案 0 :(得分:0)

Runtime.getRuntime()。exec(cmd)解决了这个问题。

以下代码段效果很好

String[] cmd = {
                "python","lib/patch.py",
                "-d", auxSrcFile,
                diffFileLoc,
                "--revert"
        };
        p = Runtime.getRuntime().exec(cmd);
        if (p != null) {
            p.waitFor();
        }
        p.destroy();