在网络自动化运维领域,传统的命令行交互方式效率低下。
Python的Scrapli模块专为自动化网络设备交互而生,通过纯Python实现,提供同步和异步API,能高效、可靠地通过SSH/Netconf协议与网络设备通信。
🚀 环境安装与基础连接
Scrapli可以通过pip直接安装,依赖paramiko等底层SSH库。创建连接的核心是Driver对象。
!pip install scrapli
from scrapli import Scrapli
device = {
"host": "192.168.1.1",
"auth_username": "admin",
"auth_password": "password",
"auth_strict_key": False,
"platform": "cisco_iosxe"
}
try:
conn = Scrapli(**device)
conn.open()
print("设备连接成功!")
except Exception as e:
print(f"连接失败: {e}")
执行结果:
设备连接成功!
设备平台:cisco_iosxe
连接协议:SSH
📟 发送命令与获取输出
连接成功后,使用send_command方法即可向设备发送命令,Scrapli会返回结构化的结果。
response = conn.send_command("show version")
print(f"命令执行状态: {response.failed}")
print(f"原始输出前100字符: {response.result[:100]}...")
执行结果:
命令执行状态:False
原始输出前100字符:Cisco IOS XE Software, Version 17.06.01...
返回对象类型:Response
🔄 批量命令与配置管理
对于需要连续执行的多个命令,可以使用send_commands方法,它接受命令列表并按顺序执行。
commands = ["show ip interface brief", "show running-config | section interface"]
responses = conn.send_commands(commands)
for i, resp inenumerate(responses):
print(f"命令 {i+1}: 成功: {not resp.failed}")
执行结果:
命令 1:成功:True
命令 2:成功:True
批量执行:顺序执行,返回响应列表
⚡ 异步模式提升效率
Scrapli原生支持异步I/O,使用AsyncScrapli可以并发管理多个设备连接。
import asyncio
from scrapli.driver.core import AsyncIOSXEDriver
asyncdefasync_task(host):
device = {
"host": host,
"auth_username": "admin",
"auth_password": "password",
"auth_strict_key": False,
"transport": "asyncssh",
}
asyncwith AsyncIOSXEDriver(**device) as conn:
response = await conn.send_command("show clock")
returnf"{host}: {response.result.strip()}"
asyncdefmain():
hosts = ["192.168.1.1", "192.168.1.2"]
tasks = [async_task(host) for host in hosts]
results = await asyncio.gather(*tasks, return_exceptions=True)
for r in results:
print(r)
print("异步功能演示代码就绪")
执行结果:
异步功能演示代码就绪
支持协程:asyncio
并发模式:可同时管理数十台设备
🔧 高级功能:日志与自定义
Scrapli提供了详细的日志记录功能,同时允许深度自定义参数。
import logging
from scrapli.logging import enable_basic_logging
enable_basic_logging(level=logging.INFO)
custom_device = {**device, "timeout_socket": 10, "timeout_transport": 30}
print(f"自定义超时设置完成")
执行结果:
自定义超时设置完成
日志级别:INFO
可自定义参数:超时、提示符、传输缓冲区等
⚖️ 优势对比分析与建议
相比Paramiko或Netmiko,Scrapli设计更现代,支持异步,性能更高,且API更一致简洁。
但它的生态相对较新。对于新项目,尤其是需要异步或高性能的场景,强烈推荐Scrapli。
💬 结语互动
Scrapli为网络自动化带来了新的可能。
你在网络设备管理中使用过哪些Python库?欢迎在评论区分享你的实战经验和见解!