在Python中获取DBus接口的属性

问题描述 投票:0回答:1

我想检查当前的网络连接是否按流量计费。在 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
属性呢?

python python-3.x linux dbus networkmanager
1个回答
0
投票

我建议您查看周围更现代的 D-Bus 库,并尝试使其工作方式更加Python化。我个人发现 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)
© www.soinside.com 2019 - 2024. All rights reserved.