集成cmd.cmdloop和gobject.MainLoop()
我写了一个小的控制台应用程序,基于cmd.Cmd这个模块。这个应用程序有一个命令循环,是通过cmd.cmdloop来触发的。
另一方面,我的控制台应用程序使用dbus来启动远程进程。我想让这个启动过程变得异步,但我遇到了一些问题:
RuntimeError: To make asynchronous calls, receive signals or export objects, D-Bus
connections must be attached to a main loop by passing mainloop=... to the constructor or
calling dbus.set_default_main_loop(...)
所以我想用gobject.MainLoop()作为主循环。
请问cmd.cmdloop和gobject.MainLoop能一起工作吗?
1 个回答
0
看起来cmd.cmdloop并不是一个主循环,它只是一个让用户反复输入的方式。如果你想让这个过程尽可能地异步,而且你已经在使用dbus,那么最好的办法可能是创建一个客户端进程,这个进程使用cmd.cmdloop,并向另一个使用gobject主循环的进程发送信号,来实际启动远程进程。客户端进程会把要执行的命令作为信号发送给gobject进程,然后gobject进程会执行这些命令。我不确定这样做是否能达到你的目的,但cmd.cmdloop在等待用户输入时会阻塞,因此可能和主循环不太兼容。