Интеграция cmd.cmdloop и gobject.MainLoop () - PullRequest
2 голосов
/ 08 июня 2011

Итак, я написал небольшое консольное приложение на основе 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 Ответ

0 голосов
/ 08 июня 2011

Похоже, cmd.cmdloop - это не основной цикл, а просто способ многократно получать информацию от пользователя. Лучше всего, если вы хотите сделать это как можно более асинхронным, и вы уже используете dbus, возможно, иметь клиентский процесс, который использует cmd.cmdloop и посылает сигналы другому процессу, который использует mainloop gobject для фактического запуска удаленные процессы. Клиентский процесс будет отправлять сигналы процессу gobject, которые содержат команду для запуска, процесс gobject будет их выполнять. Я не уверен, что это будет делать то, что вы хотите, но похоже на блоки cmd.cmdloop при вводе данных пользователем, и поэтому не будет хорошо работать с mainloop.

...