Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中转换linux伪终端输出?_Java_Linux_Pty_Ansi Escape_Sshj - Fatal编程技术网

如何在Java中转换linux伪终端输出?

如何在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

我想通过JavaAPI连接到AmazonEC2终端并执行sudo操作。我最终使用了SSHJ库,因为我发现它的界面非常简单易用。好在我甚至可以通过这个库执行sudo操作。以下是一些示例代码:

//开始新的会话 session=sshClient.startSession(); allocatePTY(“vt220”,80,24,0,0,Collections.emptyMap())

但是,我收到的回复中有控制字符,希望将它们转换为纯文本

  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();
        }
    }