Глядя на код argparse, я вижу:
ArgumentParser.parse_args
вызывает parse_known_args
и следит за тем, чтобы не было никаких ожидающих аргументов для анализа. ArgumentParser.parse_known_args
устанавливает значения по умолчанию и вызывает ArgumentParser._parse_known_args
Следовательно, обходной путь должен заключаться в прямом использовании ArgumentParser._parse_known_args
для обнаружения -h
и после этого, как обычно, ArgumentParser.parse_args
.
import sys, argparse
parser = argparse.ArgumentParser(description='my illustrative example', argument_default=argparse.SUPPRESS)
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
parser._parse_known_args(sys.argv[1:], argparse.Namespace())
args = parser.parse_args()
Обратите внимание, что ArgumentParser._parse_known_args
требуется пара параметров: аргументы из командной строки и пространства имен.
Конечно, я бы не рекомендовал этот подход, поскольку он использует преимуществавнутренняя реализация argparse
, и это может измениться в будущем.Тем не менее, я не нахожу это слишком грязным, поэтому вы все равно можете использовать его, если считаете, что риски обслуживания окупаются.