1、Java项目启动python.exe文件,代码实现如下:
@Override
public void openPythonExe() {
// exePath 存放完整路径(包含.exe文件),此路径根据情况可以任意修改
String exePath = System.getProperty("user.dir") + env.getProperty("py.exe_path");
if (StringUtils.isBlank(exePath)) {
throw new JeroBootException("启动python项目失败");
}
// 检查exe进程,如果存在先关闭进程
closePythonExe();
try {
// 启动exe执行程序
Desktop.getDesktop().open(new File(exePath));
} catch (Exception e) {
log.error("启动python项目异常", e);
throw new JeroBootException("启动python项目失败");
}
}
2、Java项目关闭python.exe文件,代码实现如下:
@Override
public void closePythonExe() {
// .exe文件名
String procName = env.getProperty("py.exe_name");
if(StringUtils.isBlank(procName)){
throw new JeroBootException("程序不存在");
}
// 判断是否存在进程
BufferedReader bufferedReader = null;
try {
Process proc = Runtime.getRuntime().exec("tasklist -fi " + '"' + "imagename eq " + procName +'"');
bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
// 存在,则先杀死该进程
if (line.contains(procName)) {
// 存在
try {
// 执行cmd命令
String command = "taskkill /F /IM " + procName;
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd /c " + command);
} catch (Exception e) {
log.error("关闭程序进程异常:" + e);
throw new JeroBootException("关闭程序进程异常");
}
break;
}
}
} catch (Exception e) {
log.error("查询程序进程异常", e);
throw new JeroBootException("查询程序进程异常");
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
3、通过以上步骤即可实现对python项目.exe的启动与关闭,在springboot项目中启动的时候可能会遇到问题,比如报错 java.awt.HeadlessException: null,可以参考另一篇文章。