gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:00 25 4
gpt4 key购买 nike

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

python脚本可以从here获取

在 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 环境中运行该应用程序,则会失败。

欢迎提出建议!!

注意:我可以独立运行“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();

关于java - 以编程方式从java调用Linux终端中的python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34783507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com