AttributeError: у модуля «os» нет атрибута «killpg».
Это мой код:
if __name__ == "__main__":
try:
main()
except Exception:
exc_info = sys.exc_info()
traceback.print_exception(*exc_info)
os.killpg(0, signal.SIGKILL)
exit(0)
Когда в программе возникает исключение, я хочу использовать метод killpg модуля os, чтобы завершить текущий процесс, но появляется сообщение об ошибке «AttributeError: у модуля 'os' нет атрибута 'killpg'». Я использую Python версии 3.7.
Можете ли вы помочь мне решить эту проблему? Большое спасибо.
2 ответа
возможно, ваша версия Python 2.x, вы можете изменить свой код и повторить попытку, используйте "os.kill()"
if __name__ == "__main__":
try:
main()
except Exception:
exc_info = sys.exc_info()
traceback.print_exception(*exc_info)
os.kill(0, signal.SIGKILL)
exit(0)
Примечание: вам следует научиться просматривать документацию Python, это упростит программирование (и вы будете более продуктивны). Поэтому добавьте в закладки документацию по стандартной библиотеке Python (которая также дает вам быструю ссылку на документацию по языку).
В любом случае соответствующая страница: https://docs.python.org/3/library/os.html#os.killpg .
(и еще один трюк с документацией: вы видите URL-адрес? Просто замените /3/ на /2/, и вы получите документацию по Python 2. Итак, мы видим, что другой ответ использует неправильное предположение (и также может быть недоступен.
Эта функция существует как в Python2, так и в Python3, но на обеих страницах указано, что она доступна только в Unix/Linux и подобных системах (поэтому, вероятно, также и в MacOS) (примечание: не Emscripten, не WASI означает, что она доступна также и в Unix и Linux ) . не будет работать в перечисленных контролируемых и переносимых средах: javascript и WebAssembly, поэтому внутри браузеров работать не будет).
Почему? Python не контролирует процессы, поэтому он просто обрабатывает запросы к операционной системе. Не во всех операционных системах есть концепция группы процессов , или они работают по-другому. Примечание:
В любом случае, если вы хотите завершить текущий процесс, вам следует использовать
Вкратце: функция отправляет сигналы собственной группе процессов, но только в операционных системах, где группы процессов доступны (например, 2023, а не в Windows). Это не лучший способ завершить вызывающий процесс.