1: Даже если разрешение не получено, оно по-прежнему соответствует ret> 3, почему?
ans: Возможно, потому что в выводе perm_denied
содержался один из символов bash ('#',' $ '), напечатайте значение child.before
или выполните шаги вручную, чтобы убедиться, что происходит перед автоматизацией.Он должен возвращать 0 в случае, если он не совпадает с чем-либо и вызывает тайм-аут.И он возвращает 0, а не вызывает исключение, потому что вы добавили pexpect.TIMEOUT
в список.
2: Как проверить точный вывод child.expect?
ans: child.expect
возвращает индекс (int) элемента в списке, который вы ему передали.Таким образом, в вашем случае вы передали [pexpect.TIMEOUT,perm_denied,ssh_newkey,conn_closed,'$','#']
, .expect
вернет индекс того, что было сопоставлено сначала слева направо с помощью регулярного выражения.Точное значение в вашей переменной ret
.
3: мне нужно использовать. * \ $ Вместо $?'$' соответствует только точному значению $ в выводе?
ans: Да, этого достаточно, чтобы соответствовать приглашению bash.Единственный случай, когда они могут сломаться, это когда кто-то из вашего ребенка печатает символ #
из какой-либо функции.
pexpect
имеет хорошую документацию , прочтите примеры здесь и это должнобудь изобильным.