You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetMiko调用send_command报io.TextIOWrapper无rstrip属性错误

NetMiko批量命令执行报错修复方案

错误根因

  • 你当前传入send_command()的comandos变量是open()函数直接返回的文件操作句柄,类型为_io.TextIOWrapper,不是字符串类型。NetMiko执行命令前会调用字符串的rstrip()方法清理命令首尾空白,文件对象没有该方法,直接触发属性不存在的报错。
  • send_command()方法仅支持传入单个字符串格式的命令,你之前把整个文件读成一个大字符串传入时,所有换行的命令会被识别为一整串无效输入,设备无法返回匹配#提示符的结果,自然触发超时。
  • 读取命令文件后没有做拆分、空行过滤,直接传入的内容不符合NetMiko的参数要求。
  • 运行时弹出的GetPassWarning是IDE终端不支持密码无回显导致的提示,不影响脚本核心逻辑,可选择性屏蔽。

修复方法

  1. 正确读取命令文件:按行拆分内容,过滤空行、清理每行首尾的换行和空白字符,生成标准的命令列表。
  2. 区分命令场景选择对应NetMiko方法:
    • 单个查看命令:使用send_command(命令字符串)
    • 批量查看类命令(如show vlan、show run等):遍历命令列表,逐个调用send_command()执行
    • 批量配置类命令(如端口配置、vlan创建等):直接将命令列表传入send_config_set()一次性执行
  3. 脚本执行完成后主动断开设备连接,释放会话。

修正后完整代码

import warnings
from getpass import GetPassWarning
# 屏蔽密码输入回显警告
warnings.filterwarnings("ignore", category=GetPassWarning)

# 读取cli.txt中的命令,生成过滤后的命令列表
with open("cli.txt", 'r', encoding="utf-8") as c:
    batch_show_cmds = [line.strip() for line in c if line.strip()]

for each_device in device_list:
    connection = ConnectHandler(**each_device)
    connection.enable()
    print(f'已连接到设备: {each_device["host"]}')
    
    # 逐个执行批量查看命令
    for cmd in batch_show_cmds:
        print(f"\n----- 命令: {cmd} 执行结果 -----")
        output = connection.send_command(cmd, expect_string=r'#')
        print(output)
    
    # 断开设备连接
    connection.disconnect()

如果你cli.txt中存放的是设备配置命令,不需要循环调用,直接替换成以下代码即可批量执行配置:

output = connection.send_config_set(batch_show_cmds)
print(output)

内容的提问来源于stack exchange,提问作者Jardel D'Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:30:57