From ee87f4288261ba03bf72a2528e04ec75be0783d0 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 22 Oct 2024 13:47:44 +0800 Subject: [PATCH] =?UTF-8?q?feat=20-=20=E6=B7=BB=E5=8A=A0=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=20shell=20=E5=91=BD=E4=BB=A4=E7=9A=84=20web=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/controller/web/TestController.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java index c66f1934f..80cf24207 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java @@ -18,13 +18,19 @@ import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.Deployment; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @@ -242,4 +248,53 @@ public class TestController { List tenantIds = workflowManageService.sync().getTenantIds(); return CommonResponse.success(tenantIds); }*/ + + @GetMapping("log") + public String log(@RequestParam String cmdStr) throws Exception { + if(!StringUtils.hasText(cmdStr)) { + return "命令不能为空"; + } + try { + ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", cmdStr); + Process process = pb.start(); + InputStream inputStream = process.getInputStream(); + InputStream errorStream = process.getErrorStream(); + + StringBuilder outputBuilder = new StringBuilder(); + // 读取命令输出的线程 + Thread outputReader = new Thread(() -> { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine())!= null) { + outputBuilder.append(line).append("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + outputReader.start(); + + // 读取命令错误输出的线程 + Thread errorReader = new Thread(() -> { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(errorStream))) { + String line; + while ((line = reader.readLine())!= null) { + outputBuilder.append("Error: ").append(line).append("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + errorReader.start(); + + // 等待命令执行完成 + outputReader.join(); + errorReader.join(); + + return outputBuilder.toString(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + return "Error executing command."; + } + } }