pxssh - Выходные данные не возвращаются правильно с определенной командой длины

При использовании pxssh из pexpect (Python 3-v4.6.0, Python 2-v4.2.1) для выполнения команды выходные данные команды не возвращаются, только сама команда вместе с управляющим символом (пример ниже). Это происходит только при использовании команды определенной длины, например, при установке размера окна на 200, команда длиной 189 символов будет запускать такое поведение, для размера окна 300, команды из 246 символов и т. Д.

Пример кода с соответствующими выходами:

Настроить:

from pexpect import pxssh
conn = pxssh.pxssh()
conn.login(host, user, password)
conn.setwinsize(500, 200)
conn.setecho(False)
conn.sendline('')
conn.prompt(1)
conn.prompt(1)

Правильный ожидаемый результат:

conn.sendline('l'*188)
conn.prompt(1)
conn.before
b'llll**snip**lllll\x1b[Kl\r\n-sh: lllll*snip*lllll: command not found\r\n'

Неверный вывод:

conn.sendline('l'*189)
conn.prompt(1)
conn.before
b'lllll**snip**lllll\r\x1b[A'

Правильный ожидаемый результат:

conn.sendline('l'*190)
conn.prompt(1)
conn.before
b'lllll**snip**llllll\x1b[Kl\r\n-sh: lllll**snip**llllll: command not found\r\n'

Кто-нибудь знает, что может быть причиной этого?

1 ответ

На случай, если кто-нибудь столкнется с этой проблемой в будущем. Эта проблема возникает, когда команда length = размер окна - длина подсказки, которая приводит к тому, что дополнительная подсказка неправильно вставляется во входящие данные, в свою очередь, вызывая неправильный возврат вывода.

Для получения дополнительной информации см.: https://github.com/pexpect/pexpect/issues/552

Другие вопросы по тегам