我正在编写一个python脚本,用于在USB-Flash上搜索.deb包,并面临以下问题:当调用org.freedesktop.DBus.Properties.GetAll("")方法时,我得到
g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: No such interface “”用任何现有接口替换方法参数会得到相同的结果,只写入输入接口的名称而不是"“。将设备作为一个参数传递也没有帮助。
当通过d脚运行相同的方法时,结果是一样的。
脚本代码的一个片段:
_bus = dbus.SystemBus()
_proxy = _bus.get_object('org.freedesktop.UDisks2','/org/freedesktop/UDisks2')
_iface = dbus.Interface(_proxy, 'org.freedesktop.DBus.ObjectManager')
for _dev in _iface.GetManagedObjects():
_dev_obj = _bus.get_object('org.freedesktop.UDisks2', _dev)
_dev_prop = dbus.Interface(_dev_obj, 'org.freedesktop.DBus.Properties')
print(_dev_prop.GetAll('org.freedesktop.DBus.Properties'))怎么回事?
Edit1:
弄明白了。您必须传递org interface.freedesktop.UDisks 2.。在本例中,我们得到以下结果:
{'CanPowerOff': True,
'Configuration': {},
'ConnectionBus': 'usb',
'Ejectable': True,
'Id': 'Kingston-DataTraveler-3.0-D067E5161936F1C156119E3E',
'Media': 'thumb',
'MediaAvailable': True,
'MediaChangeDetected': True,
'MediaCompatibility': ['thumb'],
'MediaRemovable': False,
'Model': 'DataTraveler 3.0',
'Optical': False,
'OpticalBlank': False,
'OpticalNumAudioTracks': 0,
'OpticalNumDataTracks': 0,
'OpticalNumSessions': 0,
'OpticalNumTracks': 0,
'Removable': True,
'Revision': '0001',
'RotationRate': -1,
'Seat': 'seat0',
'Serial': 'D067E5161936F1C156119E3E',
'SiblingId': '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1/1-1.1:1.0',
'Size': 7736072192,
'SortKey': '01hotplug/1661266466752717',
'TimeDetected': 1661266466752717,
'TimeMediaDetected': 1661266466752717,
'Vendor': 'Kingston',
'WWN': ''}发布于 2022-08-23 16:42:09
调用gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2结果:
node /org/freedesktop/UDisks2 {
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
GetAll(in s interface_name,
out a{sv} properties);
Set(in s interface_name,
in s property_name,
in v value);
signals:
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
interface org.freedesktop.DBus.ObjectManager {
methods:
GetManagedObjects(out a{oa{sa{sv}}} object_paths_interfaces_and_properties);
signals:
InterfacesAdded(o object_path,
a{sa{sv}} interfaces_and_properties);
InterfacesRemoved(o object_path,
as interfaces);
properties:
};
node Manager {
};
node drives {
};
node block_devices {
};
};根据D总线规范
接口名称可以提供一个空字符串;在这种情况下,如果一个具有相同名称的对象上有多个属性,则结果是未定义的(根据任意确定性规则选择一个属性,或者返回一个错误,是合理的可能性)。
我猜您正面临这些未定义的结果之一,。
但我的问题是,你为什么要调用这个方法?根据内省结果,所请求的路径不包含任何属性!
https://stackoverflow.com/questions/73461492
复制相似问题