不幸的是,
pyroute2
模块的文档相当具体,所以我找不到我遇到的一个特定问题的答案。
我的目标是保存一个特定表(让我们将其命名为表
A
)中的所有路由,然后恢复它们。我可以(显然)接收路由转储并使用单个命令清除表:
IPRoute().flush_routes(table=A)
路线存储为字典元组。显然我想用
IPRoute().route("add", table=A, ...)
恢复它们,但是参数应该是什么?
我理想的代码应该是这样的:
routes_dump = IPRoute().flush_routes(table=A)
# some processing (while table A has no routes in it)...
for route in routes_dump:
IPRoute().route("add", table=A, ...)
如果有任何关于它是如何的想法,我将不胜感激可行的!
你可以使用
pyroute2
中的
get()
函数检索的相同字典来添加路由。
pyroute2
的
route()
函数可以接受一个字典作为参数,该字典包含要添加路由的属性。
以下是操作方法:
from pyroute2 import IPRoute
# 定义表 ID
TABLE_A = 254 # 或者的表的名称
# 创建一个 IPRoute 对象
ip = IPRoute()
# 获取表 A 中的路由
routes_dump = ip.get_routes(table=TABLE_A)
# 清除表 A 中的路由
ip.route("flush", table=TABLE_A)
# 对路由执行一些处理...
# 将路由添加回表 A
for route in routes_dump:
# 从路由字典中移除 'table' 属性,因为它已经在 'route()' 函数中指定了
route.pop('table', None)
ip.route("add", **route)
# 关闭 IPRoute 对象
ip.close()
说明:
-
我们首先使用
get_routes(table=TABLE_A)
获取表 A 中的所有路由。这将返回一个字典列表,其中每个字典代表一个路由。 -
然后,我们使用
route("flush", table=TABLE_A)
清除表 A 中的路由。 -
在对路由执行必要的处理后,我们遍历
routes_dump
中的每个路由,并使用route("add", **route)
将其添加回表 A。 -
在
route("add", **route)
语句中,我们使用**
运算符将路由字典解包为关键字参数。这会将路由的属性传递给route()
函数。 -
我们从
route
字典中删除了 'table' 属性,因为它已经在route()
函数中作为参数传递。
这样就可以保存和恢复特定路由表中的路由。
标签:python,iproute,pyroute2 From: 78818316