springboot 项目中控制启动与关闭python打包项目的实现

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,可以参考另一篇文章。

猜你喜欢

转载自blog.csdn.net/weixin_39310051/article/details/125674391