0%

Java 调用本地命令的方法

由于Helm的原因,需要在docker container内执行helm来安装应用,但是helm没有提供相关的API,所以就只能调用命令来实现了。

很简单,直接使用Runtime和Process,不过要注意Process并不是立马返回exit code,需要调用waitFor方法阻塞等待Process执行完返回code,通过code的不同,以确定应该是从标准输出获取结果还是从标准错误获取结果。

列代码胜千言:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@PostMapping(value = "/exec", produces = "text/plain")
public String exec(@RequestBody String command) throws Exception {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);
int code = process.waitFor();

String content;
if (code == 0) {
content = IOUtils.toString(process.getInputStream(), StandardCharsets.UTF_8);
} else {
content = IOUtils.toString(process.getErrorStream(), StandardCharsets.UTF_8);
}

return content;
}