PyNotify在cron中无法工作?

4 投票
1 回答
756 浏览
提问于 2025-04-16 07:37

我写了一个脚本,用pynotify来发出提醒。这个脚本在我直接运行的时候(python script.py)一切正常,但当我通过定时任务(cron)运行它,像这样:00 * * * * myname python ~/scripts/script.py,就不行了!我完全不知道为什么。下面是代码片段:

        if os.path.isfile(os.path.expanduser('~/.thumbnails/normal')+'/'+thumbnail):
            n = pynotify.Notification(video_file[0], 'finished download', os.path.expanduser('~/.thumbnails')+'/'+thumbnail)
        else:
            n = pynotify.Notification(video_file[0], 'finished download', '/usr/share/icons/gnome/48x48/mimetypes/gnome-mime-application-x-shockwave-flash.png')
        print n
        n.show()

把输出导向到~/log.file后显示:<pynotify.Notification object at 0x16d4e60 (NotifyNotification at 0x13804e0)>,没有错误信息,所以我也不知道该去哪里找问题。

1 个回答

5

我对定时任务(cron jobs)了解得不算太深,但我知道一点关于pynotify的事情。它使用了libnotify和一些DBUS的东西,所以它会在某个地方调用DBUS,并且我记得它还会传递一个显示ID,用来指定通知应该显示在哪个地方。

现在,默认情况下,cron任务是不能和图形界面应用程序一起工作的,你需要指定一个显示器供它们使用:

00 * * * * myname env DISPLAY=:0 python ~/scripts/script.py

这样设置后,cron就会使用当前的显示器(桌面)。

如果你在使用Ubuntu,这个页面可能对你有帮助:
https://help.ubuntu.com/community/CronHowto

撰写回答