gpt4 book ai didi

python - 创建一个由 avahi 播放的节目

转载 作者:太空狗 更新时间:2023-10-29 22:17:24 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来输出可以通过 avahi 通过网络提供的数据。我看过的文档似乎说我必须使用 dbus 注册服务,然后将其连接到 avahi,但是执行此操作的文档非常少。有谁知道它的好文档?我一直在看这些:

python-dbus: http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html#exporting-objects

python-avahi: http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html

我真的不熟悉 avahi 的工作原理,所以任何指示都会有所帮助。

最佳答案

我意识到这个答案已经很晚了,考虑到你的问题是四年前提出的。但是,它可能会对其他人有所帮助。

下面声明一个使用 avahi/dbus 的服务:

import avahi
import dbus
from time import sleep


class ServiceAnnouncer:
def __init__(self, name, service, port, txt):
bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
avahi.DBUS_INTERFACE_ENTRY_GROUP)

self._service_name = name
index = 1
while True:
try:
group.AddService(avahi.IF_UNSPEC, avahi.PROTO_INET, 0, self._service_name, service, '', '', port, avahi.string_array_to_txt_array(txt))
except dbus.DBusException: # name collision -> rename
index += 1
self._service_name = '%s #%s' % (name, str(index))
else:
break

group.Commit()

def get_service_name(self):
return self._service_name


if __name__ == '__main__':
announcer = ServiceAnnouncer('Test Service', '_test._tcp', 12345, ['foo=bar', '42=true'])
print announcer.get_service_name()

sleep(42)

使用 avahi-browse 验证它确实已发布:

micke@els-mifr-03:~$ avahi-browse -a -v -t -r 
Server version: avahi 0.6.30; Host name: els-mifr-03.local
E Ifce Prot Name Type Domain
+ eth0 IPv4 Test Service _test._tcp local
= eth0 IPv4 Test Service _test._tcp local
hostname = [els-mifr-03.local]
address = [10.9.0.153]
port = [12345]
txt = ["42=true" "foo=bar"]

关于python - 创建一个由 avahi 播放的节目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com