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 не контролирует процессы, поэтому он просто обрабатывает запросы к операционной системе. Не во всех операционных системах есть концепция группы процессов , или они работают по-другому. Примечание:поддержка окон только в Python 2.7 и Python 3.2 и более поздних версиях.

В любом случае, если вы хотите завершить текущий процесс, вам следует использоватьили другие более сильные функции. А если вы используете потоки, то есть и специальные функции. На этом сайте вы видите различные вопросы и ответы по этому поводу. (Но ваш вопрос касается использованияпоэтому я не буду отвлекать ответ лучшими методами).

Вкратце: функция отправляет сигналы собственной группе процессов, но только в операционных системах, где группы процессов доступны (например, 2023, а не в Windows). Это не лучший способ завершить вызывающий процесс.

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