Pynotify работает нормально в интерактивном режиме, но вылетает при программном запуске (в Fedora 13)

Я пытаюсь использовать pynotify для небольшого проекта, но у меня странная проблема на моей машине Fedora 13. Похоже, что когда Pynotify запускается программно, он падает, когда show() называется - однако, если я наберу эту строку сам, она работает нормально! Я также проверил его на своем Ubuntu box, где он работает абсолютно нормально.

Мой тестовый код:

import pynotify

pynotify.init('someName')
n = pynotify.Notification("Summary", "Body")
n.show()

И результаты запуска это:

$ python -i test.py 
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    n.show()
glib.GError: Unable to connect to server
>>> n.show()
True
>>> 

Итак, есть ли у кого-нибудь идеи, что может вызвать такое поведение? К сожалению, среда Fedora находится под моим контролем, поэтому любые решения, требующие root-доступа и т. Д., На самом деле не будут работать. Я могу попробовать установить pynotify локально, однако, если это необходимо. Спасибо за любую помощь.

1 ответ

Решение

Поскольку Оуэн не принял мое предложение принять этот ответ, вот решение, которое сработало для меня. Обратите внимание, что я понятия не имею, почему это работает (кроме смутных догадок), и что я не даю никаких гарантий относительно того, является ли это хорошим решением или нет, но, возможно, если вы когда-либо находились в столь же странном положении, как я было это поможет

Если вы выполните n.show() дважды, он будет успешно запущен во второй раз. Поэтому, чтобы избежать установки двух уведомлений в системе, где Pynotify работает правильно, я использовал следующее:

import pynotify

pynotify.init('someName')
n = pynotify.Notification("Summary", "Body")
try:
    n.show()
except:
    n.show()

Обратите внимание, что в этом небольшом примере есть недостатки, и наименьший из всех результатов, если есть реальная проблема с Pynotify, которая будет возникать на обоих n.show()s - это всего лишь минимальный рабочий пример.

Другие вопросы по тегам