From edb621b9965d39e5e05f53f3db699df0e5fedc30 Mon Sep 17 00:00:00 2001 From: xyli Date: Fri, 3 Mar 2023 15:05:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ETestJschExec=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AF=BB=E5=8F=96=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/TestJschExec.java | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/test/java/TestJschExec.java b/src/test/java/TestJschExec.java index 368858e..87bc585 100644 --- a/src/test/java/TestJschExec.java +++ b/src/test/java/TestJschExec.java @@ -29,6 +29,58 @@ public class TestJschExec { System.out.println(JschUtil.execByShell(session, "source /etc/profile && source ~/.bash_profile && source ~/.bashrc && nohup java -Dappliction=jpom-test-jar -jar /home/data/test/springboot-test-jar-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &", CharsetUtil.CHARSET_UTF_8)); } + @Test + public void testShell2() throws Exception { + + String[] command = new String[]{cmd}; + Session session = null; + Channel channel = null; + InputStream inputStream = null; + OutputStream outputStream = null; + try { + session = JschUtil.createSession("192.168.1.8", 22, "root", "123456+"); + channel = JschUtil.createChannel(session, ChannelType.SHELL); + channel.connect(); + inputStream = channel.getInputStream(); + outputStream = channel.getOutputStream(); + SyncFinisher syncFinisher = new SyncFinisher(2); + PrintWriter printWriter = new PrintWriter(outputStream); + InputStream finalInputStream = inputStream; + StringBuffer stringBuilder = new StringBuffer(); + syncFinisher.addRepeatWorker(() -> { + for (String s : command) { + try { + printWriter.println(s); + printWriter.println("exit"); + //把缓冲区的数据强行输出 + printWriter.flush(); + //System.out.println(s + " " + command.length); + } catch (Exception e) { + e.printStackTrace(); + DefaultSystemLog.getLog().error("写入错误", e); + } + } + }).addRepeatWorker(() -> { + try { + byte[] buffer = new byte[1024]; + int i; + //如果没有数据来,线程会一直阻塞在这个地方等待数据。 + while ((i = finalInputStream.read(buffer)) != -1) { + //System.out.println(i); + stringBuilder.append(new String(Arrays.copyOfRange(buffer, 0, i), CharsetUtil.CHARSET_UTF_8)); + } + } catch (Exception e) { + DefaultSystemLog.getLog().error("读取错误", e); + } + }).start(); + System.out.println(stringBuilder); + } finally { + IoUtil.close(inputStream); + IoUtil.close(outputStream); + JschUtil.close(channel); + JschUtil.close(session); + } + } -- Gitee