#python #winapi #exit #exit-code #sys
#python #winapi #выход #exit-code #sys
Вопрос:
Я пишу приложение на python, которое работает в кроссплатформенной среде. Время от времени мне приходится использовать sys.exit, чтобы остановить программу, когда что-то пойдет не так (или если что-то пойдет не так). Я бы хотел использовать стандартизированные коды выхода, кроме того 1
, если что-то пошло не так. Просматривая os
страницу документации модуля python (https://docs.python.org/3/library/os.html#os.EX_OK ) Я вижу хороший список из 16 стандартных кодов выхода posix.
Я хотел найти, есть ли какие-либо коды выхода win32, которые примерно соответствуют этим кодам posix. Я обнаружил 16000 различных кодов выхода: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382 (v= против 85).aspx
К счастью, первое сообщение об ошибке было ERROR_SUCCESS = 0x0
, что хорошо соответствует os.EX_OK
. Затем я искал что-то, что соответствует os.EX_SOFTWARE
migh , но единственное, что я нашел, что может сработать ERROR_FATAL_APP_EXIT = 0x2C9
, но я не уверен, может ли быть что-нибудь лучше. Список слишком велик для эффективного поиска.
Существует ли какой-либо стандартный список (полный или неполный) кодов ошибок WIN32, которые примерно соответствуют кодам posix? Или есть какой-то согласованный способ возврата кроссплатформенных кодов ошибок?
Комментарии:
1. Семантика возвращаемого значения задается автором приложения. Если вы хотите использовать коды выхода POSIX, продолжайте и используйте их. Пока ваши приложения на Python документированы для возврата кодов выхода POSIX, любой код на любой платформе может их проверять (если это действительно необходимо или полезно). Но, возможно, я просто не понял вопроса.
2. Также смотрите, почему моя программа завершается с кодом выхода 3 ? . TL; DR: «Не существует стандарта для кодов выхода процесса».
3. Эти «коды выхода win32» не являются кодами выхода, это коды ошибок. Они соответствуют значениям POSIX errno. Насколько я знаю, стандартизированных значений выхода Windows не существует, а значения выхода POSIX редко используются на практике. Вы могли бы также просто использовать значения POSIX как есть
4. Эти «коды выхода POSIX», определенные Python, не являются POSIX и фактически были просто отклонены из единой спецификации Unix несколько месяцев назад . На самом деле они являются соглашениями (читай: рекомендациями), предоставляемыми некоторыми BSD (в их
<sysexits.h>
заголовочном файле), а затем также принятыми Linux, и ничем не санкционированы.5. Единственное, что от вас требуется при написании программы, это то, что выход с 0 означает успех, а любое ненулевое значение означает сбой. (Стандарт C использует
EXIT_SUCCESS
, но я не уверен, что что-либо когда-либо будет иметь это ненулевое значение.) Даже Windows и DOS подчиняются этому соглашению (IF ERRORLEVEL
) .