【发布时间】:2015-01-09 16:55:33
【问题描述】:
我正在编写一小段代码来远程登录到交换机并提供用户名和密码。我使用 pexpect spawn 类来实现这一点。
我创建了一个 prompt_list 并查找“登录”和“密码”,然后输入用户名和密码。
我看到的问题是 pexpect 匹配“登录”而不是密码。运行 2 -3 次后,它匹配。我是否必须添加一些延迟或类似的东西才能使其第一次工作。
有人可以帮忙吗...
try:
child = pexpect.spawn(cmd, timeout= 100)
child.logfile = sys.stdout
child.sendline('\n')
conn = True
except:
print ' some exception occured'
if conn:
i = child.expect(prompt_list, timeout = 10)
if i == 0:
print 'inside login prompt'
child.sendline('admin')
i = child.expect(prompt_list, timeout = 10)
if i == 1:
print 'Inside password prompt'
child.sendline('password')
i = child.expect(prompt_list, timeout = 10)
我的 prompt_list 是:
prompt_list = ['login:','Password:']
当我运行它时,我得到以下错误
Switch login: inside login prompt
admin
我在登录手动切换时得到的提示如下。
switch login: admin
Password:
【问题讨论】:
-
有更简单的方法来做你想做的事pastebin.com/GYzgP0A8
-
@PadraicCunningham OP 可能更喜欢将 pexpect 用于他计划稍后发布的命令。
-
脚本在linux上运行吗?一些 telnet 服务器需要 Windows 风格的换行符。尝试将
child.sendline('admin')替换为child.send('admin\r\n')。 -
@tdelaney,是 child.sendline('\n') 导致问题,在 sendline 中添加“\n”也会导致更多问题。