【问题标题】:TypeError: expected string or buffer python re.searchTypeError:预期的字符串或缓冲区 python re.search
【发布时间】:2019-07-14 17:49:42
【问题描述】:

我正在尝试创建一个项目来扫描我的网络中的 MAC 地址,并允许它们或禁止它们进入我的本地网络。我编写这个脚本是为了熟悉 re 和 pynetgear 模块来完成这个,因为我打算使用这些地址来存储数据以确定哪个设备是哪个。我尝试过的一切都不起作用,或者我尝试在此处和其他资源上查找问题,但到目前为止没有人帮助我。

我试过查看正则表达式的文档,但无法弄清楚这个问题是什么。一直到Devices 的第一个代码工作它只是调用TypeError 的MAC。

from pynetgear import Netgear
import re

netgear = Netgear(password='password')

devices = netgear.get_attached_devices()

MAC = re.search(r"mac=..:..:..:..:..:..", devices)
print(MAC.group(0))

Traceback (most recent call last):
  File "/home/z33k/Desktop/python/adhdResearch.py", line 8, in <module>
    MAC = re.search(r"mac=..:..:..:..:..:..", devices)
  File "/usr/lib/python2.7/re.py", line 146, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or buffer

【问题讨论】:

  • devices 是什么 Python 类型?
  • devices 是存储netgear结果的变量。获取附加设备。需要转成字符串吗?
  • 首先我会检查返回的devices。也许您寻找的数据已经是您可以使用的形式。
  • 是的,它需要是一个字符串。但是,您还没有说它的类型是什么。你可以print(type(devices)) 看到这个

标签: python regex


【解决方案1】:

我认为你根本不需要正则表达式。

根据PyNetgear docsget_attached_devices 返回一个命名元组的列表。您将需要遍历列表并打印 mac 值:

for item in devices:
    print(item.mac)

【讨论】:

    【解决方案2】:

    re.search 需要一个字符串或缓冲区,但 devices 是一个包含命名元组的列表。

    你可以在源码中自己看:

    https://github.com/MatMaul/pynetgear/blob/247d6b9524fcee4b2da0e65ca12c52ebdd3676b2/pynetgear/init.py#L46-L49

    https://github.com/MatMaul/pynetgear/blob/247d6b9524fcee4b2da0e65ca12c52ebdd3676b2/pynetgear/init.py#L224-L241

    打印 MAC 地址:

    for device in devices: print(device.mac)

    至于允许或禁止个别地址,遗憾的是我不知道。

    【讨论】:

    • 感谢您仍然提供帮助。
    猜你喜欢
    • 2015-06-11
    • 2016-01-24
    • 2016-07-15
    • 2013-04-18
    • 2017-08-29
    • 2020-04-02
    相关资源
    最近更新 更多