支持异步的python零依赖dbus库

dbus-next的Python项目详细描述


python dbus下一步

下一个伟大的python dbus库。

Documentation

该项目处于开发的早期阶段,公共api不稳定

python dbus next是一个用于dbus的python库,旨在成为一个功能齐全的高级库,主要用于将应用程序集成到linux桌面和移动环境中。

桌面应用程序开发人员可以使用此库通过实现公共dbus标准接口或创建自定义插件接口将其应用程序集成到桌面环境中。

桌面用户可以使用此库创建自己的脚本和实用程序,以便与这些界面交互,以自定义桌面环境。

python dbus下一步计划通过以下方式改进python的其他dbus库:

  • 零依赖和纯python 3。
  • 支持多个IO后端,包括Asyncio和Glib主循环。
  • 适合于gui开发的非阻塞io。
  • 针对python最新的语言特性,提供漂亮的服务和客户机。
  • 完全实现dbus类型系统,无需猜测类型。
  • 对库的所有功能进行集成测试。
  • 完整的公共api文档。

安装

这个库在pypi上可用作dbus-next

pip3 install dbus-next

客户端接口

客户端接口有点稳定

要在总线上使用服务,库将构造一个代理对象,您可以使用该对象来调用方法、获取和设置属性以及侦听信号。

有关详细信息,请参见overview for the high-level client

此示例连接到媒体播放器并使用MPRISdbus接口控制它。

fromdbus_next.aioimportMessageBusimportasyncioloop=asyncio.get_event_loop()asyncdefmain():bus=awaitMessageBus().connect()# the introspection xml would normally be included in your project, but# this is convenient for developmentintrospection=awaitbus.introspect('org.mpris.MediaPlayer2.vlc','/org/mpris/MediaPlayer2')obj=bus.get_proxy_object('org.mpris.MediaPlayer2.vlc','/org/mpris/MediaPlayer2',introspection)player=obj.get_interface('org.mpris.MediaPlayer2.Player')properties=obj.get_interface('org.freedesktop.DBus.Properties')# call methods on the interface (this causes the media player to play)awaitplayer.call_play()volume=awaitplayer.get_volume()print(f'current volume: {volume}, setting to 0.5')awaitplayer.set_volume(0.5)# listen to signalsdefon_properties_changed(interface_name,changed_properties,invalidated_properties):forchanged,variantinchanged_properties.items():print(f'property changed: {changed} - {variant.value}')properties.on_properties_changed(on_properties_changed)awaitloop.create_future()loop.run_until_complete(main())

服务接口

服务接口有些稳定

要在总线上定义服务,请使用ServiceInterface类和修饰类方法指定dbus方法、属性和带有其类型签名的信号。

有关详细信息,请参见overview for the high-level service

fromdbus_nextimportServiceInterface,method,dbus_property,signal,Variantfromdbus_next.aioMessageBusimportasyncioclassExampleInterface(ServiceInterface):def__init__(self,name):super().__init__(name)self._string_prop='kevin'@method()defEcho(self,what:'s')->'s':returnwhat@method()defGetVariantDict()->'a{sv}':return{'foo':Variant('s','bar'),'bat':Variant('x',-55),'a_list':Variant('as',['hello','world'])}@dbus_property()defstring_prop(self)->'s':returnself._string_prop@string_prop.setterdefstring_prop_setter(self,val:'s'):self._string_prop=val@signal()defsignal_simple(self)->'s':return'hello'asyncdefmain():bus=awaitMessageBus().connect()awaitbus.request_name('test.name')interface=ExampleInterface('test.interface')bus.export('/test/path',interface)awaitasyncio.get_event_loop().create_future()asyncio.get_event_loop().run_until_complete(main())

低级接口

低级接口有点稳定

低级接口直接处理dbus消息。

有关详细信息,请参见overview for the low-level interface

fromdbus_next.messageimportMessage,MessageTypefromdbus_next.aioimportMessageBusimportasyncioimportjsonloop=asyncio.get_event_loop()asyncdefmain():bus=awaitMessageBus().connect()reply=awaitbus.call(Message(destination='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='ListNames'))ifreply.message_type==MessageType.ERROR:raiseException(reply.body[0])print(json.dumps(reply.body[0],indent=2))loop.run_until_complete(main())

接下来使用python dbus的项目

贡献

欢迎捐款。发展发生在Github

在提交之前,运行make以运行linter、代码格式化程序和测试套件。

版权所有

您可以在麻省理工学院的许可证下使用此代码(请参阅许可证)。

?2019年,托尼·克里斯蒂

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我的int值在SharedReferences中不被记住   java如何编辑Spring可分页对象?   java如何在gradle中单独调用任务   jvm以编程方式设置最大java堆大小   java如果满足多个条件,如何使用If语句计算数字?   如何在java中从json文件中获取特定值   如何在Sphinx4中为Java语音识别添加自定义语法?   java int[]copy=data;//当数据是数组时会发生什么?   java豪猪管理器。停下来。destroy()不起作用   安卓在API级别28中找不到画布变量   基于SOLID的java冗余   用于talend作业的java Liferay和portlet   从java到安卓的视频流   java获取在控件的类定义中添加自定义控件的场景大小   awt Java IndexOutOfBoundsException   java如何使用Spring JmsTemplate更改MQ头   java遍历数组并打印每个对象   java Google Map api v2标记在我旋转手机和地图“刷新”之前不会移动