@a63826ndrew
Студент, новичок в Python

Как сделать корректный вывод работы команды SSH?

Здравствуйте!
Работаю с такой штукой как ОВЕН ПЛК200, и смысл заключается в следующем:
Через форму подключаюсь по SSH, потом задаю команду и ответ вывожу на listbox, но результат мало того, что выводится одной строкой, так еще и выглядит как-то странно, примерно вот так:
645cea981fcdd920545291.png
Помимо этого, результат выводится через раз, и только в режиме дебага, когда на каждую строчку поставлю точку останова, поэтому наверное надо это решать в помощью Thread.Sleep(), или можно как-то другими изменениями кода это поправить?
Вот код, который выполняет отправку команды и получение результата:
private void CommandSend_Click(object sender, EventArgs e)
        {
            StringBuilder ReadStream(StreamReader reader)
            {
                StringBuilder result = new StringBuilder();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    result.AppendLine(line);
                }
                return result;
            }
            if (SSHclient.IsConnected)
            {
                OVEN_info.Items.Clear();
                StringBuilder answer = null;
                SshCommand sc = SSHclient.CreateCommand(txtCommand.Text);
                ShellStream stream = SSHclient.CreateShellStream("stream", 0, 0, 0, 0, 1024);
                var reader = new StreamReader(stream);
                var writer = new StreamWriter(stream);
                writer.WriteLine(sc);
                answer = ReadStream(reader);
                OVEN_info.Items.Add(answer);
            }
        }

Библиотека, с которой работаю - SSH.NET
Заранее спасибо.
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Это форматирование при выводе текста в терминал. По идее его можно попросить отключить, указав, что твой клиент это не поддерживает. Но не факт, что устройство тебя послушает.
Управляющие последовательности ANSI

И еще, ты читал вот этот ответ на stackoverflow?
Там не совсем та же библиотека, но интерфейс выглядит очень похоже.
var connInfo = new Renci.SshNet.PasswordConnectionInfo("<IP>", 22, "<USER>", "<PWD>");
var sshClient = new Renci.SshNet.SshClient(connInfo);

sshClient.Connect();
var stream = sshClient.CreateShellStream("", 0, 0, 0, 0, 0);

// Send the command
stream.WriteLine("echo 'sample command output'");

// Read with a suitable timeout to avoid hanging
string line;
while((line = stream.ReadLine(TimeSpan.FromSeconds(2))) != null)
{
    Console.WriteLine(line);
    // if a termination pattern is known, check it here and break to exit immediately
}
// ...
stream.Close();
// ...
sshClient.Disconnect();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы