gpt4 book ai didi

Python - 尝试计算 SSH std.out 中字符串的实例

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:50 24 4
gpt4 key购买 nike

我已经潜伏了一段时间,并且从这个网站学到了我所知道的几乎所有内容。然而,我遇到了一个无法找到解决方案的问题。我正在尝试通过 SSH 连接到 Cisco 设备并提取信息。我正在运行“sho interface status”,它将给出以下输出:

 Port    Name               Status       Vlan       Duplex Speed Type
Fa0 connected 1 a-full a-100 10/100BaseTX
Fa1 notconnect 1 auto auto 10/100BaseTX
Fa2 connected 1 a-full a-100 10/100BaseTX
Fa3 notconnect 313 auto auto 10/100BaseTX
Fa4 notconnect 1 auto auto 10/100BaseTX
Fa5 notconnect 1 auto auto 10/100BaseTX
Fa6 connected 1 a-full a-100 10/100BaseTX
Fa7 connected 1 a-full a-100 10/100BaseTX"

我正在尝试计算有多少行包含文本“notconnect”。我尝试了很多不同的方法,要么得到像 235 这样的任意数字,要么得到 0。下面是当我得到奇怪的数字时我正在尝试的示例:

            stdin, stdout, stderr = dssh.exec_command('show interface status')
response1 = stdout.read()
if 'notconnect' in response1:
EMPTY_PORT = 0
for line in response1:
if line.strip() and line[0]!='connected':

这是我在得到 0 响应时尝试过的方法:

            stdin, stdout, stderr = dssh.exec_command('sho int status')
response = stdout.read()
if 'notconnect' in response:
data = stdout.read()
count = data.count('not')
EMPTY_PORT = count
for line in response:
count = count + line.count("not")

我真的希望你们(和女孩们)能够帮助引导我走向正确的方向。我已经在同一部分脚本上工作了近 6 个小时。我知道我在这里遗漏了一些东西。

我唯一能想到的是 EMPTY_PORT 是我用来捕获计数的端口。

最佳答案

这就是我处理计数部分的方式:

from StringIO import StringIO

RAW_RESPONSE = """\
Port Name Status Vlan Duplex Speed Type
Fa0 connected 1 a-full a-100 10/100BaseTX
Fa1 notconnect 1 auto auto 10/100BaseTX
Fa2 connected 1 a-full a-100 10/100BaseTX
Fa3 notconnect 313 auto auto 10/100BaseTX
Fa4 notconnect 1 auto auto 10/100BaseTX
Fa5 notconnect 1 auto auto 10/100BaseTX
Fa6 connected 1 a-full a-100 10/100BaseTX
Fa7 connected 1 a-full a-100 10/100BaseTX
"""


def count_notconnected(response):
counter = 0
for line in response:
if 'notconnect' in line:
counter += 1
return counter


response = StringIO(RAW_RESPONSE)
print count_notconnected(response)

输出:

4

StringIO只是一个允许您包装字符串的模块,因此它的行为方式与 file object 相同。 - 例如打开文件或网络响应:您可以从中read()、迭代它等。

这允许使用示例数据测试 count_notconnected 函数,并在其工作后将真实的响应输入其中。

<小时/>

您的尝试不起作用,因为在这两种情况下,您都将响应中的所有数据一次 read() 放入字符串中,然后通过执行 逐个字符地迭代该字符串for line in response1: - line 实际上是单个字符。

所以:

  • 迭代 file object会在换行符边界处为您分割它,并让您迭代行。

  • 但是,迭代字符串时,即使它包含换行符,也会迭代字符串的字符。

关于Python - 尝试计算 SSH std.out 中字符串的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com