Существуют ли коды выхода WIN32, которые примерно соответствуют кодам выхода POSIX?

#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 ) .