【问题标题】:Need assistance with pexpect module - script doesn't find the match需要 pexpect 模块的帮助 - 脚本找不到匹配项
【发布时间】: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
  • 看看telnetlib
  • @PadraicCunningham OP 可能更喜欢将 pexpect 用于他计划稍后发布的命令。
  • 脚本在linux上运行吗?一些 telnet 服务器需要 Windows 风格的换行符。尝试将child.sendline('admin') 替换为child.send('admin\r\n')
  • @tdelaney,是 child.sendline('\n') 导致问题,在 sendline 中添加“\n”也会导致更多问题。

标签: python pexpect


【解决方案1】:

try/except 中的 child.sendline('\n') 引起了问题:

import pexpect
conn = False
import sys

try:
    child = pexpect.spawn("telnet 127.0.0.1", timeout= 100)
    child.logfile = sys.stdout
    conn = True
except:
    print ' some exception occured'

if conn:
    child.expect(":", timeout = 10)
    child.sendline('user')
    child.expect(":", timeout = 10)
    child.sendline('password')
    child.expect(">")

【讨论】:

  • 感谢 Padraic .. 这有帮助.. 当我删除 sendline 时它​​工作正常。另外,我看到用户被提示两次?我厌倦了设置 child.setecho(False) 但这也无济于事。对此有什么建议吗?
  • 别担心,你的意思是登录名被回显了两次?
  • 是的,除了密码,我在 sendline() 中给出的任何内容都会重复两次。输出如下: switch login: admin admin Password: password 看起来像是 echo'ed 但 setecho(False) 没有帮助
  • 我不认为 setecho 似乎工作,有类似问题的几个帖子。您可以尝试禁用回声。
  • 使用 Logfile_read 达到目的.. 参考此站点compgroups.net/comp.lang.python/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多