簡體   English   中英

在Linux Terminal中以編程方式從Java調用python腳本

[英]Invoking python script in Linux Terminal from java programmatically

我正在開發一個Java應用程序,用於檢查源文件中的補丁程序(是否存在)。 用於檢測補丁程序更改的核心邏輯位於python腳本[titled'patch.py​​']中,並且我的Java應用程序與此Python補丁程序腳本進行通信以獲取操作的退出狀態。

python腳本可以從這里獲得

在Windows中,它工作正常,但在Linux env中。 腳本本身不會被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環境中運行該應用程序,則該腳本將失敗。

建議是受歡迎的!

注意:我可以獨立運行'patch.py​​'腳本(在Linux終端中),但是當我嘗試從Java應用程序中調用該腳本時,我將無法調用它,並且總是獲得退出值'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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM