Python附带了一个称为pdb的调试器。python调试器非常强大,确实有助于对代码进行故障排除。您可以在此处找到官方文档。ipdb建立在ipython和pdb的基础上,为用户提供了更多的交互体验。
这个方法不是很广泛,只是一个非常快速而肮脏的演示,以展示其某些功能以及如何在nornir中使用它。它没有假定以前的知识,但也没有在解释上花费太多,因此希望用户提供足够的资料以进行进一步的研究。
安装ipdb
首先,您需要安装ipython,然后按照官方指南进行操作,然后需要安装ipdb
。您可以通过pip安装后者:
pip install ipdb
检查结果
为了演示起见,我编写了一些返回结果的代码。该代码并不重要,但是它的作用是:
- 读取一个Yaml文件,其中包含一堆我们要在设备上配置的用户
- 连接到几个网络设备并配置用户
- 检查哪些用户已经配置,我们需要哪些用户并计算两个列表;一个包含我们需要配置的用户的列表,另一个包含我们需要删除的用户的列表。
- 最后,我们将这些列表传递给模板,然后生成一些配置。
让我们从获得结果后立即插入一个断点开始(第56行):
如果执行脚本,我们将在该代码点获得一个shell。
现在,我们可以开始使用python代码来了解对象的工作原理:
上面的输出表明该对象是类型的AggregatedResult
。该文档肯定会说明它是如何工作的,但是我们可以继续使用它。输出还表明该对象可能是带有键spine00.bma
和的类似于字典的对象spine01.bma
。让我们继续挖掘。
有趣的是,您可以按<tab>
以获得自动补全功能。在这种情况下,r.<tab>
向我们展示了该对象提供的可用方法。看到,,等方法keys
,items
再加上的输出,print(r)
似乎可以证实我们的理论,该对象可能是类似dict的对象。
让我们测试一下理论:
好吧,看来我们是对的。请注意,我们提取了一个MultiResult
属于密钥的,spine00.bma
并将其分配给变量以供进一步检查。这个新MultiResult
对象看起来像一个列表。让我们再次使用<tab>来查看提供哪些方法:
有了方法,如append
,extend
等等,这肯定看起来像一个列表。根据先前的输出,该元素1
似乎是task的结果napalm_get
,让我们看看是否可以提取它:
太好了,现在ng_result
有了运行task的结果napalm_get
。让我们继续挖掘:
瞧,这个新的对象有类似的属性changed
,result
,diff
,等等,所以看起来我们终于设法挖了我们的目标,并找出如何得到我们想要的东西。下一个 以前