如何在Netmiko中跳过命令输出的<---More--->
解决Netmiko连接Cisco ASA输出截断问题
要解决<---More--->导致的输出截断,最直接可靠的方法是关闭ASA的终端分页功能,以下是具体实现方案:
方法1:提前关闭分页(推荐)
在执行目标show命令前,发送terminal length 0命令,让ASA一次性返回所有输出,不再分页。修改后的代码如下:
import re import netmiko import sys import json def get_results(ip, login, password): device = { 'device_type': 'cisco_asa', 'ip': ip, 'username': login, 'password': password, 'secret': password, 'global_delay_factor': 2 } try: net_connect = netmiko.ConnectHandler(**device) # 关闭终端分页,让输出一次性返回 net_connect.send_command("terminal length 0") except Exception as e: print("Ошибка при подключении:", e) return try: # 使用send_command即可自动等待命令执行完成 output = net_connect.send_command("show aaa-server NPS_MFA_TEST") print(output) except Exception as e: print("Ошибка при выполнении команды:", e) net_connect.disconnect() return result = {} match_group = re.search(r"Server Group:\s+(\S+)", output) if match_group: result["Server Group"] = match_group.group(1) match_address = re.search(r"Server Address:\s+(\S+)", output) if match_address: result["Server Address"] = match_address.group(1) net_connect.disconnect() return json.dumps(result) if __name__ == "__main__": if len(sys.argv) == 4: ip = sys.argv[1] username = sys.argv[2] password = sys.argv[3] result = get_results(ip, username, password) print(result) else: print("Неверное количество аргументов")
方法2:自动处理分页交互(备选)
如果无法提前关闭分页,可以通过send_command_timing循环匹配<---More--->,自动发送空格翻页:
# 修改命令执行部分的代码 try: output = net_connect.send_command_timing( "show aaa-server NPS_MFA_TEST", strip_prompt=False, delay_factor=2 ) # 循环处理所有分页 while "<---More--->" in output: # 发送空格继续加载后续内容 output += net_connect.send_command_timing(" ", strip_prompt=False, delay_factor=2) print(output) except Exception as e: print("Ошибка при выполнении команды:", e) net_connect.disconnect() return
方法1更简洁稳定,无需处理复杂的交互逻辑,优先推荐使用。
内容的提问来源于stack exchange,提问作者Данияр Данилов
相关产品推荐
相关产品推荐

