linux Python中DBus接口的Get属性

xurqigkl  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(117)

我想检查当前的网络连接是否计量。在Bash中,我可以运行:

qdbus --system org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Metered

我想用Python来做。
我写了一段代码来获得必要的接口:

import dbus

bus = dbus.SystemBus()
interface = dbus.Interface(
    bus.get_object(
        'org.freedesktop.NetworkManager',
        '/org/freedesktop/NetworkManager'
    ),
    dbus_interface='org.freedesktop.NetworkManager'
)

我可以得到任何方法,比如GetDevices()

method = interface.get_dbus_method('GetDevices')

它的工作原理(print(method())):

dbus.Array([dbus.ObjectPath('/org/freedesktop/NetworkManager/Devices/1'), dbus.ObjectPath('/org/freedesktop/NetworkManager/Devices/2'), dbus.ObjectPath('/org/freedesktop/NetworkManager/Devices/14')], signature=dbus.Signature('o'))

如何获得Metered属性?

r7xajy2e

r7xajy2e1#

我建议你看看周围更现代的D-Bus库,并尝试在它们的工作方式上更pythonic。我个人觉得pydbus很容易上手和运行。

from pydbus import SystemBus

bus = SystemBus()
network_manager = bus.get('org.freedesktop.NetworkManager')
print("Metered is:", network_manager.Metered)

如果你想使用dbus库,那么它会像这样:

import dbus
bus = dbus.SystemBus()

network_manager_props = dbus.Interface(bus.get_object(
    'org.freedesktop.NetworkManager',
    '/org/freedesktop/NetworkManager'),
    dbus.PROPERTIES_IFACE)

metered = network_manager_props.Get(
            "org.freedesktop.NetworkManager", 'Metered')
print("Metered is:", metered)

相关问题