Python 3.x 如何快速处理netmiko的大量输出?

Python 3.x 如何快速处理netmiko的大量输出?,python-3.x,Python 3.x,我正在尝试从我们网络上的设备获取VPN列表。此列表非常长,如果没有进一步的输入,将无法完全返回。有没有一种方法可以快速获取完整列表,而无需通过ssh连接循环和重复发送enter命令 我尝试使用send命令,但由于尾随字符不是预期的字符,因此超时。send_command_timing没有超时,只返回整个列表的一小部分,后面的文本显示我没有得到所有信息。目前,我让它重复地通过一个循环,使用send_命令_计时来获取下一行,然后从输出中剥离字符串。问题是,这种方法速度非常慢,无法以任何现实的方式使用

我正在尝试从我们网络上的设备获取VPN列表。此列表非常长,如果没有进一步的输入,将无法完全返回。有没有一种方法可以快速获取完整列表,而无需通过ssh连接循环和重复发送enter命令

我尝试使用send命令,但由于尾随字符不是预期的字符,因此超时。send_command_timing没有超时,只返回整个列表的一小部分,后面的文本显示我没有得到所有信息。目前,我让它重复地通过一个循环,使用send_命令_计时来获取下一行,然后从输出中剥离字符串。问题是,这种方法速度非常慢,无法以任何现实的方式使用

从netmiko导入ConnectHandler
设备={
“设备类型”:“思科ios”,
'host':“example.host”,
“用户名”:“用户”,
“密码”:“通过”,
}
trailingString=“”
connect=ConnectHandler(**设备)
打印(“连接完成”)
connect.send_命令(“启用3”+“\n”,预期_string=“Password:”)
connect.send_命令(“pass”+“\n”,预期_string=“#”)
输出=connect.send_命令_计时(“sho vpn sessiondb svc”)
在输出中跟踪字符串时:
if(output.endswith(trailingString)):
输出=输出[:-(len(trailingString)+1)]#添加+1以删除尾部换行符
输出+=连接。发送命令\u定时(“\n”)
打印(输出)
连接。断开()

我还没有找到一个能够足够快地检索send_command_timening函数的所有输出的解决方案,以便合理地使用它。我希望有更好/更快的方法来获取此信息。

我无法直接通过netmiko找到解决方案,但通过更改设备本身的一些值,我能够获得整个输出。对于我连接到的特定设备,它正在使用终端寻呼机0删除默认行限制

因此,通过在运行connect.send_命令(“终端寻呼机0”)之前使用connect.send_命令(“sho vpn sessiondb svc”),我能够获得整个返回值

connect=ConnectHandler(**设备)
#connect=Netmiko(**设备)
打印(“连接完成”)
connect.send_命令(“启用3”+“\n”,预期_string=“Password:”)
connect.send_命令(“enable3secret”+'\n',预期_string=“#”)
connect.send_命令(“终端寻呼机0”)
输出=connect.send_命令_计时(“sho vpn sessiondb svc”)

看起来您正在使用“cisco_ios”设备类型,但正在连接到cisco ASA(基于您发送的“show vpn sessiondb svc”命令)

Netmiko应该在SSH连接完成后不久自动禁用输出分页。因此,您不应该在输出中看到“”字符串

我怀疑如果您将Netmiko设备类型切换为“cisco_asa”,输出分页问题就会消失


或者换一种说法,因为您使用的是“cisco_ios”设备类型,所以向远程设备发送了禁用输出分页的错误命令。一旦切换到正确的设备类型,应发送正确的命令(即Netmiko将自动发送“终端寻呼机0”命令)。

我建议检查您是否可以运行
终端长度0
。如果这在您的环境中不起作用,则可能支持此命令的其他变体。

我也遇到了类似的问题。我通过将目标设备会话的全局延迟因子设置为“2”解决了这个问题


我把它换成了cisco_asa,但我不知道如何让默认连接尝试启用3而不是仅仅启用。因此,当我尝试连接cisco_asa时,默认的启用行为失败,因为给定的密码是enable 3 not enable。如何将ConnectHandler设置为设置enable 3而不是enable?是的,这将是一个小问题……因为ASA在不提升权限的情况下无法禁用分页,所以它被烘焙到ASA驱动程序中,以便只执行
enable
(而不是
enable 3
)。如果权限提升与用户名绑定,即
登录为
,则可以执行此操作。在这种情况下,您可以将启用密码设置为空。您可能希望在启用3问题上创建GitHub问题。
    device = {
    'device_type': 'cisco_ios',
    'host': "x.x.x.x",
    'username': 'some_user',
    'password': 'some_pass',
    'global_delay_factor': 2
}
ssh = ConnectHandler(**device)
output = ssh.send_command("show running")
print(output)



enter code here