我正在开发一个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;。
答案 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();