sys.exit в python выдает ошибку SystemExit pystray

#python-3.x #systemexit #pystray

#python-3.x #systemexit #pystray

Вопрос:

Я запускаю значок PYSTRAY, который запускает консольную программу. Когда я пытаюсь остановить его с помощью этого кода

 def stop_rtd():
    print("Stopping RTD")
    sys.exit()
    icon.stop()
  

Система выдает эту ошибку

 An error occurred when calling message handler
Traceback (most recent call last):
  File "C:UsersramacAppDataLocalProgramsPythonPython37libsite-packagespystray_win32.py", line 389, in _dispatcher
    uMsg, lambda w, l: 0)(wParam, lParam) or 0)
  File "C:UsersramacAppDataLocalProgramsPythonPython37libsite-packagespystray_win32.py", line 209, in _on_notify
    descriptors[index - 1](self)
  File "C:UsersramacAppDataLocalProgramsPythonPython37libsite-packagespystray_base.py", line 267, in inner
    callback(self)
  File "C:UsersramacAppDataLocalProgramsPythonPython37libsite-packagespystray_base.py", line 368, in __call__
    return self._action(icon, self)
  File "C:UsersramacAppDataLocalProgramsPythonPython37libsite-packagespystray_base.py", line 463, in wrapper0
    return action()
  File "C:/Tej/GitHub/Python/YahooDLs/try_systray.py", line 16, in stop_rtd
    sys.exit()
SystemExit
  

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

Я запускаю это на Windows10

Пожалуйста, помогите мне решить эту проблему.

Комментарии:

1. Вы когда-нибудь находили решение? Я сталкиваюсь с той же проблемой.

Ответ №1:

Я нашел альтернативный способ выхода из программы. В os модуле также вызывается функция exit _exit . Он принимает один аргумент, который является кодом выхода / кодом состояния. Обычно так и должно быть 0 . Итак, ваша функция будет выглядеть так:

 import os
def stop_rtd():
    icon.stop()
    os._exit(0)
  

Также обратите внимание, что вы должны остановиться icon перед выходом из программы.