使用 Expect 的密码提示不起作用
Password prompt using Expect not working
我需要接受来自键盘的密码,其中至少包含一个数字、至少一个大写字母、至少一个小写字母和可选符号 # & - 我编写了以下代码。总是超时,就是检测不到密码...谁能帮忙
package require Expect
log_user 0
send "Enter Password\n"
expect {
-re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])[a-zA-Z0-9#&-]*} {send "Password ok"}
timeout { send "Time out" }
}
我已经编辑了代码,现在只有在第一次尝试时以正确的格式给出密码时它才能工作...如果在第一次尝试时给出了错误的格式,expect 将等待下一次尝试。但即使下一个条目是正确的,Expect 也没有检测到它,并且会进行下一次尝试并最终超时
您需要另一条规则来匹配不可接受的密码(即任何以换行符结尾但不匹配另一条规则的密码),打印一条消息,然后重新开始等待。关键是 exp_continue
.
send "Enter Password\n"
expect {
-re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])([a-zA-Z0-9#&-]*)[\r\n]+} {
send "Password ok"
# Save the password for later...
set thePassword $expect_out(1,string)
}
-re {[\r\n]+} {
send "That looks like a bad password. Try again please.\n"
exp_continue
}
timeout {
send "Time out"
}
}
exp_continue
命令说“继续期待;我们还没有完成”,这对于处理复杂的交互 至关重要 。此外,我将匹配项锚定在该行的末尾并添加了 (
…)
以使密码更易于提取。
我需要接受来自键盘的密码,其中至少包含一个数字、至少一个大写字母、至少一个小写字母和可选符号 # & - 我编写了以下代码。总是超时,就是检测不到密码...谁能帮忙
package require Expect
log_user 0
send "Enter Password\n"
expect {
-re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])[a-zA-Z0-9#&-]*} {send "Password ok"}
timeout { send "Time out" }
}
我已经编辑了代码,现在只有在第一次尝试时以正确的格式给出密码时它才能工作...如果在第一次尝试时给出了错误的格式,expect 将等待下一次尝试。但即使下一个条目是正确的,Expect 也没有检测到它,并且会进行下一次尝试并最终超时
您需要另一条规则来匹配不可接受的密码(即任何以换行符结尾但不匹配另一条规则的密码),打印一条消息,然后重新开始等待。关键是 exp_continue
.
send "Enter Password\n"
expect {
-re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])([a-zA-Z0-9#&-]*)[\r\n]+} {
send "Password ok"
# Save the password for later...
set thePassword $expect_out(1,string)
}
-re {[\r\n]+} {
send "That looks like a bad password. Try again please.\n"
exp_continue
}
timeout {
send "Time out"
}
}
exp_continue
命令说“继续期待;我们还没有完成”,这对于处理复杂的交互 至关重要 。此外,我将匹配项锚定在该行的末尾并添加了 (
…)
以使密码更易于提取。