Pynotify отлично работает в интерактивном режиме, но вылетает при программном запуске (в Fedora 13) - PullRequest
0 голосов
/ 11 апреля 2011

Я пытаюсь использовать 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 Ответ

0 голосов
/ 17 апреля 2011

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

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

import pynotify

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

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

...