как использовать plink и ожидать одновременно

Я использую plink и ожидаю подключения к серверу из Windows. Я создал текстовый виджет .l1, чтобы посмотреть, что происходит во время соединения. Обычно, когда я использую это:

catch {exec plink.exe -ssh myserver} res
.l1 insert 1.0 $res

Я получаю в текстовом виджете .l1: «пароль:», что означает, что plink работает, он подключается к серверу и запрашивает у меня пароль.

Когда я использую spawn вместо exec:

catch {spawn plink.exe -ssh myserver} res
expect "password: "
.l1 insert 1.0 $res
exp_send "exit"

Я получаю случайные цифры, например, 1482 или 4584. Почему это не работает?


person lucas    schedule 20.02.2014    source источник
comment
Это идентификатор процесса plink. Что вы хотите отобразить?   -  person glenn jackman    schedule 21.02.2014
comment
Я хочу быть уверен, что plink работает и ожидает, что на данном этапе он хорошо отвечает. Обычно plink работает в фоновом режиме, и я ничего не вижу. Почему он возвращает мне процесс id, а не ответ на вопрос о пароле?   -  person lucas    schedule 21.02.2014


Ответы (1)


Expect помнит, что видел. Я настоятельно рекомендую прочитать книгу «Исследуя ожидание».

Что-то вроде этого (непроверенное) должно помочь:

spawn plink.exe -ssh myserver
expect "password: "
.l1 insert 1.0 $expect_out(buffer)
exp_send "password\r"
expect "my_shell_prompt$ "
.l1 insert end $expect_out(buffer)
... etc
person glenn jackman    schedule 20.02.2014