我想检查当前的网络连接是否按流量计费。在 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
属性呢?
我建议您查看周围更现代的 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)