0

我是 python 和 pynotify 的新手,我想创建一个通知消息,向我显示 python 和 pynotify 的通知,但我有一个问题,我在互联网上找到的教程中使用的所有示例。

前任。

#!/usr/bin/python
import sys
import pynotify

if __name__ == "__main__":
    if not pynotify.init("icon-summary-body"):
        sys.exit(1)

    n = pynotify.Notification(
        "Hi There",
        "welcome to stackoverflow!",
        ##dont remove the below line
    "notification-message-im")
    n.show()

或者

#!/usr/bin/env python

import os
import pynotify

pynotify.init("random information")
s = os.popen("fortune -n 100 -s","r").read()
n = pynotify.Notification("Fortune",s)
n.show()

总是给我同样的错误

** (icmp.py:13188): WARNING **: Connection Closed
Traceback (most recent call last):
  File "icmp.py", line 14, in <module>
    n.show()
gio.Error: Connection Closed

这是什么意思??

谢谢

4

3 回答 3

0

好吧,我在发布这个问题一年后回复你。您可能已经得到了解决方案。所以我会为其他面临问题的人回答。

我正在做一个使用 Pynotify 的项目,我遇到了同样的问题。经过大量研究后,我发现我正在使用 root 用户调用我的脚本。如果您还使用 root 用户运行脚本,则可能是问题所在。问题是 root 没有运行 dbus 会话。我猜它甚至不拥有 XScreen。我假设您想使用属于已登录用户的 Dbus 会话。

解决方案 1:使用 gksu。GUI 应用程序应该以 gksu 启动,而不是 su 或 sudo。

解决方案 2:将以下内容添加到您的脚本中。

import os
os.environ['DISPLAY'] = ':0.0'

解决方案 3:将 root 用户添加到 dbus 组。[未验证]

我希望它有所帮助。

于 2015-03-28T09:30:25.683 回答
0

对我来说,目前在使用 sudo python 时使用通知的唯一方法是使用子进程调用 notify-send:

桌面环境:xfce4

WIP 方法(不安全):sudo -Eu root python2.7

import os, subprocess

SudoUser = os.environ['SUDO_USER']

DBUSAddress = "DBUS_SESSION_BUS_ADDRESS={}".format(os.environ['DBUS_SESSION_BUS_ADDRESS'])

NotiCommand='{} notify-send "Welcome" "{}"'.format(DBUSAddress, SudoUser)

CompleteCall = 'sudo -u {} {}'.format(SudoUser, NotiCommand)

subprocess.call(CompleteCall, shell=True)

给你!在我的情况下,这个问题是基于 Arch 的发行版中严格安全性的结果,因为 debian 基本发行版更灵活或实际上不安全。因为这更像是一种 hack,并且它使用“shell=True”,所以不推荐。

于 2017-05-25T23:54:57.873 回答
-1

有时,当调用 .init() 和创建通知之间的间隔过长时,可能会发生这种情况。有一个超时,当你调用 pynotify.init() 时,它可能会过去。如果您确保在发出通知之前立即再次调用它,您应该消除此错误。

于 2014-02-11T18:39:54.463 回答