Вопрос

Я пишу библиотеку для поддержки Telnet'ing на удаленном сервере и запуска приложений.

Дело в установлении соединения, возвращении данных, анализе и т. Д. (По крайней мере, настолько пронзительно, как и для общения с программами через текстовый интерфейс).

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

Когда указанное приложение запускается правильно, это работает без проблем:

promptB = "hello(x)# "   # Yes, the space at the end is intentional
response = tn_conn.cmd("app_name\n", prompt=promptB)

Я хотел бы использовать быстрое изменение (или отсутствие быстрого изменения), чтобы определить, не началась ли программа. Я подумал, что это была бы золотая возможность попробовать Telnetlib's wearm (), так как ожидается (), позволяет передать список строк, чтобы соответствовать ответу.

Я, однако, не могу заставить это работать:

promptA = "hello(x)# "   # Yes, the space at the end is intentional
promptB = "hello> "      # Yes, the space at the end is intentional

tn_conn.write("app_name\n")
which_prompt, mo, response = self.tn_conn.expect([promptA, promptB], timeout=3)

Команда ожидайте, что всегда начинается приложения, начинают успешно или нет.

Что = "-1"

Мо = нет

response = "бормотать r r n другие вещи r n r nhello#"

Документы говорят, что можно ожидать либо строку, либо объект режима (я прохожу строку), так что я что -то упускаю? Взгляд на код TelnetLib показывает, что его вызов re.search (), а не re.match (), так что это не будет проблемой.

Кто -нибудь может предложить предложения о том, что я делаю не так?

РедактироватьДобавлены Parens к приведению быстрого примера, чтобы лучше проиллюстрировать, почему ожидание () не работает, как и ожидалось.

Это было полезно?

Решение 3

В предыдущих попытках я преследовал опцию Regex, разместив .* На обоих концах моей строки поиска, а также re.compile() к строке поиска, прежде чем передавать его/им .expect(); Все без повезло.

Благодаря предложениям джатанизма я повторно обменил использование корпорации, на этот раз с мыслью, что expect() Был, э -э ... ожидая «режима», где я думал «строка».

Конечно же, в моей быстрой строке были символы, которые, как ожидалось, рассматривали как символы корпорации - ()s, если быть точным. Выбегая парены, пусть expect() Сделай свою работу.

Другие советы

Не забудьте, используете ли вы регуляцию в Python, вы всегда можете использовать RAW (r'my string'), а не добавлять во все побеги; делает его более читабельным.

У меня есть что работать. Посмотрите на # или % или $ подсказки. Что касается ваших подсказок, убедитесь, что специальные персонажи сбежались. (). Может быть, сбежать, чтобы быть уверенным.

idx, obj, response = tn_conn.expect("\#","\%","\$",3)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top