Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用 Junos PyEZ 操作表和视图分析结构化输出

结构化输出的 Junos PyEZ 操作 (op) 表从在 Junos 设备上执行的 RPC 的 XML 输出中提取特定数据。将表定义加载或导入到 Python 模块中后,可以检索表项目并提取和操作数据。

要从特定设备检索信息,必须创建一个表实例,并将其与 Device 表示目标设备的对象相关联。例如:

以下部分将讨论如何检索和处理数据:

检索表项目

Table item 属性确定从操作命令输出中提取哪些项目。例如,此处包含的 Junos PyEZ EthPortTable 定义(供参考)默认执行 show interfaces "[afgxe][et]-*" media 命令并从输出中提取 physical-interface 项目。

通过调用 get() 该方法并提供所需的任何参数,您可以在 Python 脚本中检索表项目。如果表定义在 args 属性中包含默认参数,则执行的 RPC 会在您调用 get() 时自动包含这些参数,除非您在参数列表中覆盖这些参数。

要检索所有表项,请使用空参数列表调用 get() 方法。

您还可以通过将命令选项作为参数 get() 传递给方法来检索特定的表项目。如果命令选项为不带值的标志,则参数列表中将选项设置为等于 True。否则,请将参数和所需值作为键值对包含在参数列表中。您可以查看 Junos CLI 中操作命令的可能参数。

默认情况下,EthPortTable 会返回名称与表达式 "[afgxe][et]-*"匹配的以太网接口的信息。要仅检索 ge-0/3/0 接口的 Table 项,请将添加 interface_name='ge-0/3/0' 作为参数添加 get()

注意:

如果 Junos OS 命令行界面 (CLI) 中的选项名称为连字符,则必须将名称中的任何短划线更改为下划线。但是,参数值是一个字符串,因此可以包含连字符。

如果 CLI 命令采用的可选第一个参数不需要显式指定选项名称或关键字,则只要 Table args_key 属性引用了该参数,则可以在方法参数列表中省略选项名称get()。在以下示例中,show interfaces命令将接口名称作为可选参数:

EthPortTable 定义 args_key 属性将可选参数 interface_name定义为,使您能够使用参数,而无需在 get() 方法参数列表中显式指定选项名称。

默认情况下,Junos PyEZ 会规范所有操作表键和值,这会去除所有前导空格和尾部空格,并将内部空格字符序列替换为单个空格。要禁用规范化,请 normalize=False 作为方法参数 get() 添加。

访问表项目

检索表项目后,您可以将它们视为 Python 字典,这使您能够使用标准 Python 库中的方法来访问和操作这些项目。

要查看与表项名称对应的字典密钥列表,请调用 keys() 该方法。

在本案例中,只有一个密钥。

您可以使用 Python in 运算符验证“表”项中是否存在特定密钥。

要查看与每个键关联的字段或值列表,请调用 values() 该方法。此方法 values() 将返回一个元组列表,其中为每个在视图中定义的字段都带有名称-值对。

要查看完整的项列表,包括密钥和值,请调用 items() 方法。

如何通过表进行迭代

表支持迭代,使您能够循环遍历每个 Table 项,其方式与遍历列表或字典的方式相同。这使得快速格式化和打印所需字段变得轻而易举。

模块中包含的 jnpr.junos.op EthPortTable 定义将执行 show interfaces "[afgxe][et]-*" media 命令并从输出中提取 physical-interface 项目。以下代码将遍历 physical-interface 这些项目,并打印每个以太网端口的名称和操作状态:

oper EthPortView 中定义的字段与输出中元素的值 oper-status 相对应。EthPortView 定义不定义 name 字段。默认情况下,每个视图项目都有一个 name 属性,该属性引用用于唯一标识该项目的密钥。

输出包括接口名称和操作状态。