当前位置:首页>python>Scrapli,一个可靠的python项目!

Scrapli,一个可靠的python项目!

  • 2026-08-22 16:15:49
Scrapli,一个可靠的python项目!

在网络自动化运维领域,传统的命令行交互方式效率低下。

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库?欢迎在评论区分享你的实战经验和见解!

最新文章

随机文章