在Linux终端中以编程方式从java调用python脚本
我正在开发一个Java应用程序,用于检查源文件中的补丁(如果有或没有)。检测修补程序更改的核心逻辑存在于python脚本[标题为'patch.py']中,我的Java应用程序与该python修补程序脚本通信,以检索操作的退出状态 python脚本可以从以下位置获得: 在windows中,它运行良好,但在Linux环境中。脚本本身没有从Java应用程序调用。我不确定哪里出了错 我使用“ProcessBuilder”调用python脚本,源代码如下:在Linux终端中以编程方式从java调用python脚本,java,python,linux,terminal,processbuilder,Java,Python,Linux,Terminal,Processbuilder,我正在开发一个Java应用程序,用于检查源文件中的补丁(如果有或没有)。检测修补程序更改的核心逻辑存在于python脚本[标题为'patch.py']中,我的Java应用程序与该python修补程序脚本通信,以检索操作的退出状态 python脚本可以从以下位置获得: 在windows中,它运行良好,但在Linux环境中。脚本本身没有从Java应用程序调用。我不确定哪里出了错 我使用“ProcessBuilder”调用python脚本,源代码如下: if (System.getProperty("
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------");
}
if(System.getProperty(“os.name”).indexOf(“Windows”)!=-1){
ArrayList命令=新建ArrayList();
//如果平台为Windows,将启动Cmd提示符。
添加命令(“cmd”);
命令。添加(“/c”);
add(“python”);
add(“lib/patch.py”);
添加(“-d”);
add(auxSrcFile);
添加命令(diffFileLoc);
command.add(“--revert”);//切换以还原修补程序
pb=新的ProcessBuilder(命令);
}否则{
ArrayList命令=新建ArrayList();
//如果平台是Linux,则将启动xterm。
添加(“xterm”);
命令。添加(“-e”);
add(“python”);
add(“lib/patch.py”);
添加(“-d”);
add(auxSrcFile);
添加命令(diffFileLoc);
command.add(“--revert”);//切换以还原修补程序
pb=新的ProcessBuilder(命令);
}
如果(pb!=null){
p=pb.start();
如果(p!=null){
p、 waitFor();
}
}
int exitStatus=p.exitValue();
如果(exitStatus==1){
System.out.println(“…OK”);
System.out.println(“----检测到补丁----”;
}否则{
System.out.println(“…错误”);
System.out.println(“----未找到修补程序-------”;
}
如果在Windows中运行Java应用程序,python脚本将被正确调用,而如果在Linux环境中运行应用程序,python脚本将失败
欢迎提出建议
注意:我可以独立运行“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();
这感觉像是路径问题,您确定正确管理了路径吗?您不应该使用带有斜杠的字符串,因为这是由不同的字符串处理的OSs@TimP:是的,我认为路径不应该是一个问题,因为在单机版中尝试运行相同的命令(使用“lib/patch.py”)时,我能够无任何问题地执行脚本。