[英]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.