[英]Use dbus to just send a message in Python
I have 2 Python programs.我有 2 个 Python 程序。 I just want to send a message (a long string) from the one to the other, and I want use dbus.
我只想从一个消息(一个长字符串)发送到另一个,我想使用 dbus。 Now, is there an easy way to do this?
现在,有没有简单的方法来做到这一点?
For example, if the message is very small, I have partially solved the problem putting the message in the path.例如,如果消息非常小,我已经部分解决了将消息放入路径中的问题。 But then I had to use the external program dbus-send:
但后来我不得不使用外部程序 dbus-send:
Server (python):服务器(蟒蛇):
import dbus,gtk
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
def msg_handler(*args,**keywords):
try:
msg=str(keywords['path'][8:])
#...do smthg with msg
print msg
except:
pass
bus.add_signal_receiver(handler_function=msg_handler, dbus_interface='my.app', path_keyword='path')
gtk.main()
Client (bash:( ):客户端 (bash:():
dbus-send --session /my/app/this_is_the_message my.app.App
Is there a way to write the client in Python?有没有办法用Python编写客户端? or also, is there a better way to achieve the same result?
或者,是否有更好的方法来实现相同的结果?
Here is an example that uses interface method calls:下面是一个使用接口方法调用的例子:
Server:服务器:
#!/usr/bin/python3
#Python DBUS Test Server
#runs until the Quit() method is called via DBUS
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
class MyDBUSService(dbus.service.Object):
def __init__(self):
bus_name = dbus.service.BusName('org.my.test', bus=dbus.SessionBus())
dbus.service.Object.__init__(self, bus_name, '/org/my/test')
@dbus.service.method('org.my.test')
def hello(self):
"""returns the string 'Hello, World!'"""
return "Hello, World!"
@dbus.service.method('org.my.test')
def string_echo(self, s):
"""returns whatever is passed to it"""
return s
@dbus.service.method('org.my.test')
def Quit(self):
"""removes this object from the DBUS connection and exits"""
self.remove_from_connection()
Gtk.main_quit()
return
DBusGMainLoop(set_as_default=True)
myservice = MyDBUSService()
Gtk.main()
Client:客户:
#!/usr/bin/python3
#Python script to call the methods of the DBUS Test Server
import dbus
#get the session bus
bus = dbus.SessionBus()
#get the object
the_object = bus.get_object("org.my.test", "/org/my/test")
#get the interface
the_interface = dbus.Interface(the_object, "org.my.test")
#call the methods and print the results
reply = the_interface.hello()
print(reply)
reply = the_interface.string_echo("test 123")
print(reply)
the_interface.Quit()
Output:输出:
$ ./dbus-test-server.py &
[1] 26241
$ ./dbus-server-tester.py
Hello, World!
test 123
Hope that helps.希望有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.