首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: org.freedesktop.DBus.Properties.GetAll返回“g-dbus-error-夸克:没有这样的接口”。

GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: org.freedesktop.DBus.Properties.GetAll返回“g-dbus-error-夸克:没有这样的接口”。
EN

Stack Overflow用户
提问于 2022-08-23 15:37:08
回答 1查看 372关注 0票数 0

我正在编写一个python脚本,用于在USB-Flash上搜索.deb包,并面临以下问题:当调用org.freedesktop.DBus.Properties.GetAll("")方法时,我得到

代码语言:javascript
复制
g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: No such interface “”

用任何现有接口替换方法参数会得到相同的结果,只写入输入接口的名称而不是"“。将设备作为一个参数传递也没有帮助。

当通过d脚运行相同的方法时,结果是一样的。

脚本代码的一个片段:

代码语言:javascript
复制
_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'))

D脚截图

怎么回事?

Edit1:

弄明白了。您必须传递org interface.freedesktop.UDisks 2.。在本例中,我们得到以下结果:

代码语言:javascript
复制
{'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': ''}
EN

回答 1

Stack Overflow用户

发布于 2022-08-23 16:42:09

调用gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2结果:

代码语言:javascript
复制
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总线规范

接口名称可以提供一个空字符串;在这种情况下,如果一个具有相同名称的对象上有多个属性,则结果是未定义的(根据任意确定性规则选择一个属性,或者返回一个错误,是合理的可能性)。

我猜您正面临这些未定义的结果之一,

但我的问题是,你为什么要调用这个方法?根据内省结果,所请求的路径不包含任何属性!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73461492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档