"无法将Python字节数组转换成NetworkManager / GLib的GArray_guchar"

2024-05-16 07:43:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python接口到NetworkManager来配置Linux中的网络连接。我可以添加连接,但在设置有线连接的硬件(MAC)地址时遇到错误。此代码说明了问题:

#!/usr/bin/python3
from gi.repository import NetworkManager

s_wired = NetworkManager.SettingWired.new()
addr = '00:32:12:34:56:11'
mac_bytes = NetworkManager.utils_hwaddr_atoba(addr, 1)

s_wired.set_property(NetworkManager.SETTING_WIRED_MAC_ADDRESS, mac_bytes)    
# ^^^ TypeError: could not convert 'b'\x002\x124V\x11'' to 
#     type 'GArray_guchar_' when setting property 'NMSettingWired.mac-address'

NetworkManager API是用C语言实现的,并且使用GLib,所以据我所知,Python和GLib或GObject系统之间的类型转换是有问题的。以下是一些版本和类型信息:

^{pr2}$

因为'mac_bytes'(它是一个字节数组)与我能得到的无符号字符数组非常接近,所以我认为类型转换系统应该没有问题。我在Python中使用GLib和GObject自省,因此如果可能的话,我更喜欢GLib解决方案而不是d-Bus解决方案,但是任何有效的解决方案都会有所帮助。此时,我无法升级NetworkManager版本(如上所示)。在

有什么办法解决这个错误吗?在

API引用:https://wiki.gnome.org/Projects/NetworkManager/Developers


Tags: 版本apibytesmac系统错误property数组