Сложность в методе sendline модуля pexpect - PullRequest
0 голосов
/ 20 августа 2011

Мне нужно автоматизировать процесс интервью, давая заранее определенные ответы, если я ожидаю какую-то строку в вопросе интервью.

Я использую pexpect.spawn, чтобы запустить дочерний процесс и пройти собеседование.

Часть моего кода:

child.expect("\> ")

child.sendline("test")

Я сохраняю процесс собеседования в файле, используя child.logfile = fout

Часть fout:

What would you like to use for the display name:^M
> ^M

Invalid input: ''^M

^M

What would you like to use for the display name:^M
> test


test^M

Как видно выше, это соответствует новой строке в первый раз, отсюда и комментарий "Неверный ввод:". Поэтому он дважды задает один и тот же вопрос, а затем принимает «тест» в качестве ответа.

Что я могу сделать, чтобы мой ответ был принят впервые?

Есть ли что-нибудь связанное с параметром "timeout" в child.expect?

Я пытался использовать такие параметры, как время ожидания = 0, время ожидания = -1 и т. Д. Но ничего не работает.

1 Ответ

0 голосов
/ 27 апреля 2012

вау получить ответ: child.setecho (False)

работал над этим вопросом пару часов. к счастью, это работает.

Я думаю, что проблема заключается в том, что всякий раз, когда мы отправляем строку, если отправленная строка совпадает с шаблоном, с которым мы работаем (как, к примеру, PROMPT, который мы обычно используем), то до того, как будет получен результат Pexpect возвращается.

должен сказать, что мы должны выбрать ОЖИДАЮЩИЙ ОБРАЗЕЦ ВНИМАТЕЛЬНО. В общем, для меня, я следовал рекомендованному пути в примере, установив PS1 = [PEXPECT] \ $ и затем отключив setecho, затем отправьте команду для изменения PS1 у меня эта процедура работает.

...