如何在Java中转换linux伪终端输出?
我想通过JavaAPI连接到AmazonEC2终端并执行sudo操作。我最终使用了SSHJ库,因为我发现它的界面非常简单易用。好在我甚至可以通过这个库执行sudo操作。以下是一些示例代码: //开始新的会话 session=sshClient.startSession(); allocatePTY(“vt220”,80,24,0,0,Collections.emptyMap()) 但是,我收到的回复中有控制字符,希望将它们转换为纯文本如何在Java中转换linux伪终端输出?,java,linux,pty,ansi-escape,sshj,Java,Linux,Pty,Ansi Escape,Sshj,我想通过JavaAPI连接到AmazonEC2终端并执行sudo操作。我最终使用了SSHJ库,因为我发现它的界面非常简单易用。好在我甚至可以通过这个库执行sudo操作。以下是一些示例代码: //开始新的会话 session=sshClient.startSession(); allocatePTY(“vt220”,80,24,0,0,Collections.emptyMap()) 但是,我收到的回复中有控制字符,希望将它们转换为纯文本 Starting riak: [60G[[0;32m O
Starting riak: [60G[[0;32m OK [0;39
经过大量研究,我使用“jansi”java库()解决了这个问题 现在,我更新的代码如下所示:
Command cmd = null;
try (Session session = sshClient.startSession()) {
session.allocateDefaultPTY();
cmd = session.exec(command);
new StreamCopier(cmd.getInputStream(), AnsiConsole.out()).keepFlushing(true).copy();
cmd.join(timeout, timeUnit);
}finally{
if(cmd != null){
cmd.close();
}
}
这是一个很好的问答,但是你应该把答案从问题中分离出来。回答你自己的问题来结束这个循环
Command cmd = null;
try (Session session = sshClient.startSession()) {
session.allocateDefaultPTY();
cmd = session.exec(command);
new StreamCopier(cmd.getInputStream(), AnsiConsole.out()).keepFlushing(true).copy();
cmd.join(timeout, timeUnit);
}finally{
if(cmd != null){
cmd.close();
}
}