集成 cmd.cmdloop 和 gobject.MainLoop()

Posted

技术标签:

【中文标题】集成 cmd.cmdloop 和 gobject.MainLoop()【英文标题】:Integrating cmd.cmdloop and gobject.MainLoop() 【发布时间】:2011-09-10 10:24:06 【问题描述】:

所以我写了一个基于 cmd.Cmd 的小型控制台应用程序。应用程序有一个由 cmd.cmdloop 触发的命令循环

另一方面,我的控制台应用程序使用 dbus 来启动远程进程。我正在尝试使 laumch 异步,但我得到了

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】:

看起来 cmd.cmdloop 不是主循环,只是一种反复获取用户输入的方法。你最好的选择是,如果你想让它尽可能异步,并且你已经在使用 dbus 可能是有一个客户端进程,它使用 cmd.cmdloop 并将信号发送到另一个使用 gobject mainloop 的进程来实际启动远程进程。客户端进程将向包含要运行的命令的 gobject 进程发送信号,gobject 进程将执行它们。我不确定这会做你想做的事,但它看起来像用户输入上的 cmd.cmdloop 块,因此不能很好地与 mainloop 配合使用。

【讨论】:

以上是关于集成 cmd.cmdloop 和 gobject.MainLoop()的主要内容,如果未能解决你的问题,请参考以下文章

Vala 可以在没有 GObject 的情况下使用吗?

python gobject.mainloop 吞噬信号事件

gobject-2.0-0 无法在 macbook 上加载

Gobject的对象方法

如何在python中正确关闭gobject主循环?

No package ‘polkit-gobject-1‘ found