如何使用 pexpect 响应 CLI 上的命令问题?

How to respond to command questions on a CLI using pexpect?

我正在使用 Python 并希望自动化网络设备的 CLI 界面。 问题是我无法使用 pexpect 发送需要 "yes"/"no" 确认的命令。 我认为发生这种情况是因为预期与问题不匹配。

child = pexpect.spawn ('ssh -p <port> user@192.168.1.1')
child.expect ("password: ")
child.sendline ('userPass')
child.expect ('> ')
child.sendline('show')
child.expect('> ')
logging.info(child.before)

# works fine untill now - it connects to the box and prints the show output

child.sendline ('reset')

logging.info(child.before)
# this command prints the same thing as previous child.before

logging.info('This line gets printed.')

child.expect ("<additional text> Are You sure? [no,yes] ")

logging.info('This line does not get printed.')

child.sendline ('yes')

试试这个:

import re

child.expect( re.escape("<additional text> Are You sure? [no,yes] ") )

我认为(但现在没有检查文档)pexpect 将文本作为正则表达式处理。这对于匹配不一定是常量的事物很有用。但是,这确实意味着当您想要匹配在正则表达式语法中有意义的字符(例如“?”、“[”和“]”)时,您需要相应地转义它们。

转义预期文本后,"yes" 仍未 accepted/sent 到设备。 我通过在 "yes":

之后发送附加行 ('') 解决了这个问题
child.sendline ('yes')
child.sendline('')

[]? 是正则表达式元字符(它们具有特殊含义并且不按字面匹配)。为避免将模式解释为正则表达式,请改用 child.expect_exact(your_pattern)