如何将一个守护程序添加到我的 Quickly 应用程序中?

我正在使用quickly构建一个应用程序,并且我想要添加一个在后台运行的守护进程。你如何做到这一点?

你应该看一下 D-Bus。 - ADcomp
请提供一个指向快速主页的链接。像那样的名字无法通过谷歌搜索到。 - dotancohen
这个守护进程应该做什么?它需要公开还是只针对你的应用程序? - Timo
@dotancohen 完成了。虽然我建议重要的是它是用Python编写的。 - 8128
@Timo 我不能代表Vigesh,但是对于我的悬赏,我正在寻找一个只针对我的应用程序的解决方案。 - 8128
@Timo 目前这个守护进程只针对我的应用程序,但以后我可能会决定公开它。 附注:fluteflute,感谢你提供赏金。 - Vignesh
4个回答

据我所知,目前没有什么特定的方法可以快速阻止或辅助你运行守护进程,但至少有两个选项我知道/猜测你可以使用Python来实现:

选项一:Distutils

注意:我尚未尝试过这个方法 :)

  1. 将您的守护进程脚本放到您的 Quickly 项目的 bin 目录中,例如: bin/yourapp-launcher

  2. 将以下内容添加到 data/yourapp-launcher.desktop 文件中:

    [Desktop Entry]
    Name=Your App
    Exec=/bin/sh -c 'yourapp-launcher'
    Type=Application
    X-GNOME-Autostart-Delay=30
    Icon=yourapp
    Comment=
    NoDisplay=true
    
  3. 编辑 setup.py 并在 DistUtilsExtra 部分中指定其他 data_files,例如:

    DistUtilsExtra.auto.setup(
    name='hello-ubuntu',
    version='0.1',
    #license='GPL-3',
    #author='Your Name',
    #author_email='email@ubuntu.com',
    #description='UI for managing â¦',
    #long_description='Here a longer description',
    #url='https://launchpad.net/hello-ubuntu',
    cmdclass={'install': InstallAndUpdateDataDirectory},
    data_files=[('/etc/xdg/autostart', ['data/yourapp-launcher.desktop'])]
    )
    
似乎是一种方法,当守护进程必须为所有用户运行时,例如类似于U1的工作方式。
选项2:硬编码
将所有内容硬编码到您的应用逻辑中,例如在第一次运行时初始化~/.config/autostart/yurapp-launcher.desktop,类似于GmailNotify App的做法。
与GmailNotify App不同,您可以依赖python-xdg库来访问freedesktop.org标准。
import xdg
print xdg.BaseDirectory.xdg_config_home

似乎适合用户管理的守护进程。

从我所看到的,似乎没有快速添加守护程序的模板。不过,你可以通过创建一个守护程序模板来做出贡献。如何创建自己的模板在这个问题的答案中有解释:如何创建一个新的快速应用程序模板
你也可以加入Launchpad上的社区模板组,让你的模板可供他人使用。
编辑:还有Unity镜头模板。它只适用于Ubuntu Unity,所以你将会受限于特定平台(如果你问我的话,这是相当大的弱点)。但它似乎已经准备好了D-Bus相关的事情。有点像守护程序,但可能不完全一样。你可以以此为起点,创建一个与平台无关的守护程序,也许...
我除了从别人那里能找到的一些细节外,不知道其他任何详细信息,抱歉。我自己正在研究如何在Qt4中使用quickly。编辑2:刚刚发现Qt有一个D-Bus组件,这将使您的守护程序与平台无关(可以在Windows和Linux等系统上运行)。这个讨论论坛(http://www.qtcentre.org/threads/38453-Send-and-receive-a-signal-between-2-Qt-applications)有一个示例(用C++编写的),展示了如何使用它。或者您可以搜索QDBusConnection和QDBusMessage。


我已经查看了许多链接,但我正在寻找一种推荐的方法来连接我的快速GUI应用程序和一个将并行运行的守护进程。该守护进程必须与同一应用程序打包,并且应在启动时启动。 - Vignesh
再说一遍,Quickly不支持这个功能。你必须将应用程序从Quickly转换为“真正的”Python。这就是为什么我提供了示例链接。 - dotancohen

Python 3.3将会有一个用于管理守护进程的daemon模块。