Python: Почему делает 'sys.exit (сообщение)' звонил от потока не, печатают 'сообщение' к stderr?

3 опции:

  • можно возвратить его от Main, если Вы объявляете, что Ваш Main метод возвращается int.
  • можно звонить Environment.Exit(code) .
  • можно установить свойства использования кода выхода: Environment.ExitCode = -1;. Это будет использоваться, если ничто иное не будет устанавливать код возврата или использовать одну из других опций выше).

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

8
задан Jan-Philip Gehrcke 30 July 2009 в 20:29
поделиться

2 ответа

Я согласен с тем, что документы Python неверны или, точнее говоря, неполны в отношении sys.exit и SystemExit, когда они вызываются / запускаются потоками, отличными от основного; пожалуйста, откройте проблему с документацией в онлайн-трекере Python, чтобы ее можно было решить в следующей итерации документации (возможно, в ближайшем будущем - исправления документации проще и удобнее, чем исправления кода; -).

Решение - довольно просто, конечно - просто оберните любую функцию, которую вы используете как цель threading.Thread , декоратором, который выполняет try / , кроме SystemExit, e : вокруг него и выполняет дополнительную функцию "запись в stderr", которая вам нужна (или, что лучше, вместо этого использует вызов logging.error) перед завершением. Но, учитывая проблему с документом, на которую вы правильно указали, это '

6
ответ дан 5 December 2019 в 22:20
поделиться

Не все потоки в Python одинаковы. Вызов sys.exit из потока фактически не приводит к выходу из системы. Таким образом, вызов sys.exit () из дочернего потока бессмысленен, поэтому имеет смысл, что он ведет себя не так, как вы ожидаете.

Эта страница больше рассказывает о потоках объектов и различиях между потоки и специальный «основной» поток.

0
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: