gpt4 book ai didi

Mac OS 上的 Python ioctl 错误

转载 作者:行者123 更新时间:2023-11-28 22:00:52 25 4
gpt4 key购买 nike

我正在尝试在 Mac 上运行以下函数,但它正在抛出

struct.pack('iL', bytes, names.buffer_info()[0])
IOError: [Errno 102] Operation not supported on socket

它在 linux 上工作得很好。谁能告诉我这是怎么回事?


代码:

def _get_interface_list():
max_iface = 32 # Maximum number of interfaces(Aribtrary)
bytes = max_iface * 32
is_32bit = (8 * struct.calcsize("P")) == 32 # Set Architecture
struct_size = 32 if is_32bit else 40

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
names = array.array('B', '\0' * bytes)
outbytes = struct.unpack('iL', fcntl.ioctl(
s.fileno(),
0x8912, # SIOCGIFCONF
struct.pack('iL', bytes, names.buffer_info()[0])
))[0]
namestr = names.tostring()
return namestr

最佳答案

问题是 Mac OS X 和其他 BSD 系统不支持 SIOCGIFHWADDR。你必须使用 getifaddrs ,它现在也被 Linux 支持,尽管它似乎没有被 Python 公开。但是,您可以使用 ctypes 来实现这一点。希望<强>this example (BSD 风格的许可证)可以帮助您。

此外,您可以使用 netifaces 简单地避免所有麻烦。 .

关于Mac OS 上的 Python ioctl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094835/

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