[PyQt] How to process QDBusPendingCallWatcher results?

Phil Thompson phil at riverbankcomputing.com
Mon Aug 13 16:33:39 BST 2012


On Mon, 13 Aug 2012 11:13:36 -0400, Evade Flow <evadeflow at gmail.com>
wrote:
>> Sorry, my mistake - QDBusPendingReply, not QPyDBusPendingReply...
> 
> Ah, okay---yeah, that works great, thanks! I had a couple minor typos in
> my example. Appending a complete, working version below, in case it's
> helpful to someone else (possibly a future version of me! :-}) It should
> work on most current Linux distributions, though you might need to
> replace 'sda1' with a different partition name...
> 
> ----------
> 
> from PyQt4 import QtCore, QtDBus
> 
> class DeviceInterface(QtDBus.QDBusAbstractInterface):
> 
>     def __init__(self, service, path, connection, parent=None):
>         super().__init__(service, path, 'org.freedesktop.UDisks.Device',
>                          connection, parent)
> 
>     @QtCore.pyqtSlot(QtDBus.QDBusArgument)
>     def callFinishedSlot(self, call):
>         reply = QtDBus.QDBusPendingReply(call)
>         if reply.isError():
>             print(reply.error().message())
>         else:
>             print("  PID        UID     COMMAND")
>             print("-------    -------  
>             ------------------------------------")
>             for pid, uid, cmd in reply.argumentAt(0):
>                 print("{0:>7d}    {1:>7d}   {2}".format(pid, uid, cmd))
> 
> if __name__ == '__main__':
>     import sys
>     app = QtCore.QCoreApplication(sys.argv)
> 
>     dev = DeviceInterface('org.freedesktop.UDisks',
>                           '/org/freedesktop/UDisks/devices/sda1',
>                           QtDBus.QDBusConnection.systemBus(), app)
> 
>     async = dev.asyncCall("FilesystemListOpenFiles");
>     watcher = QtDBus.QDBusPendingCallWatcher(async, dev)
>     watcher.finished.connect(dev.callFinishedSlot)
>     sys.exit(app.exec_())

Actually there is still a bug. Change the call to pyqtSlot() to...

    @QtCore.pyqtSlot(QtDBus.QDBusPendingCall)

...or just remove it completely.

Phil


More information about the PyQt mailing list