Paramiko Expect(华为网络)

时间:2018-07-26 14:04:23

标签: windows python-3.x paramiko pexpect

我在华为设备上期望的paramiko出现问题,这在 cisco 上非常有效,只是用来绘制图片...

我正在创建一个简单的SSH脚本,希望在每个给定命令的末尾都出现提示,同样,它在 cisco 上也可以正常工作,提示以#结尾,例如switch(config)#,但是 hua 设备上的提示都用括号括起来,例如[switch]

huawei 用户模式下,提示符为<switch>,paramiko期望能正常工作,但是在配置模式下,带有括号[]的它只是挂起并超时,可能是因为方括号? python认为这可能是一个列表?

import paramiko
from paramiko_expect import SSHClientInteraction
from os import system

system('cls')


IP = '192.168.5.2'
UN = 'username'
PW = 'password'
baseprompt = '<RICH_USG>'
sysprompt = str('[RICH_USG]')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=IP, username=UN, password=PW)
session = SSHClientInteraction(ssh, timeout=5, display=True)
print('interactive SSH session established!')
session.expect(baseprompt)
print('DEBUG ------- Baseprompt found')

session.send('screen-length 0 temporary')
session.expect(baseprompt)


session.send('sys')
session.expect(sysprompt)  # This is where the script fails and times out


output = session.current_output_clean
ssh.close()

print(output)

任何建议将不胜感激

2 个答案:

答案 0 :(得分:0)

字符串'[RICH_USG]'的问题在于expect()会将其用作正则表达式来与输入进行匹配,而[...]是一种特殊语法,仅匹配给定的单个字符,例如RI等。

您需要通过用[转义来删除\的所有特殊含义。您不需要转义],但是可以对称。因此您的字符串应为'\[RICH_USG]'。为避免意外后果,通常通过在rr'\[RICH_USG]'前面加上前缀来使其成为原始字符串。请注意,expect()默认情况下会将其扩展到r'.*\n\[RICH_USG]$',因此您的提示必须在一行的开头,并包括所有行。

答案 1 :(得分:0)

使用的encoding = latin-1问题已解决,但是 我无法使用paramiko验证期望值。因此,我使用了ROBOT框架的SSHlibrary。 对我来说很好