2013-12-11 12 views
1

Я хочу подключиться к терминалу Amazon EC2 через JAVA API и выполнять операции sudo. Я закончил использовать SSHJ-библиотеку, потому что нашел интерфейс очень простым и простым в использовании. Приятно, что я могу даже выполнять sudo-операции через эту библиотеку. Вот пример кода:Как преобразовать вывод linux pseudo в Java?

// Запуск нового сеанса session = sshClient.startSession(); session.allocatePTY ("vt220", 80,24,0,0, Collections.emptyMap());

Command cmd = null; 
String response = null; 
// your allocating a new session there 
try (Session session = sshClient.startSession()) { 

    cmd = session.exec("sudo service riak start"); 
    response = IOUtils.readFully(cmd.getInputStream()).toString(); 
    cmd.join(timeout, timeUnit); 
} finally { 
    if (cmd != null) 
     cmd.close(); 
} 

Однако ответ, полученный мной, имел контрольные символы и хотел преобразовать их в обычный текст.

Starting riak: [60G[[0;32m OK [0;39 
+0

Это хороший Q и A, но вы должны, вероятно, разделить ответ на вопрос. –

+0

Ответьте на свой вопрос, чтобы закрыть цикл –

ответ

2

После долгих исследований, я решил проблему с помощью "jansi" библиотеку Java (http://jansi.fusesource.org/)

Так что теперь мой обновленный код выглядит примерно так:

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

И это работает красиво.