Почему Python argparse использует код ошибки 2 для SystemExit?

Когда я ввожу ввод argparse Python, который ему не нравится, он вызывает SystemExit с кодом 2, который кажется, означает "Нет такого файла или каталога". Зачем использовать этот код ошибки?

import argparse
import errno

parser = argparse.ArgumentParser()
parser.add_argument('arg')

try:
    parser.parse_args([])
except SystemExit as se:
    print("Got error code {} which is {} in errno"
        .format(se.code, errno.errorcode[se.code]))

производит этот вывод:

usage: se.py [-h] arg
se.py: error: too few arguments
Got error code 2 which is ENOENT in errno

person kuzzooroo    schedule 17.05.2014    source источник
comment
Коды выхода имеют разное значение для разных систем. Коды errno — это совершенно другой стандарт.   -  person Martijn Pieters    schedule 17.05.2014
comment
@MartijnPieters, я этого не понимал. Есть ли какая-либо информация о стандартном (если есть) использовании argparse?   -  person kuzzooroo    schedule 17.05.2014
comment
возможный дубликат Значение номеров ошибок в исключениях Python   -  person vaultah    schedule 17.05.2014
comment
@frostnational: речь идет о errno кодах ошибок, не о том, почему argparse использует 2 в качестве кода выхода. Вы делаете ту же ошибку, что и ОП.   -  person Martijn Pieters    schedule 17.05.2014


Ответы (1)


Вы путаете C errno коды ошибок с процессом статус выхода; эти два понятия совершенно не связаны.

Значения состояния выхода не имеют официального стандарта, но правило 2 означает неправильное использование; это код выхода, используемый, например, встроенными модулями Bash.

os модуль предоставляет os.EX_* константы, представляющие sysexit.h константы, используемые многие системы POSIX. os.EX_USAGE — это код выхода 64, и его также можно использовать, хотя argparse на самом деле не использует эту константу, поскольку она доступна только в системах UNIX, в то время как argparse должна работать и в Windows, и на других платформах.

person Martijn Pieters    schedule 17.05.2014