argparse
применяет преобразование типов к аргументам параметров и значениям по умолчанию, если значения по умолчанию являются строками. Тем не менее, кажется, что это не делает этого для позиционных аргументов:Как преобразовать тип применения argparse в значение по умолчанию для позиционных аргументов?
import argparse as ap
p = ap.ArgumentParser()
p.add_argument('file', nargs='*',
metavar='FILE',
default='-',
type=ap.FileType(),
help='Input files. - is stdin. Default: %(default)s')
print(p.parse_args([]))
# Namespace(file='-')
print(p.parse_args(['-']))
# Namespace(file=[<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>])
(Ideone)
Если изменить file
к --file
так, что эти аргументы опции, значение default
преобразуется, как и ожидалось.
Есть ли у меня какие-либо варианты лучше, чем прямое пропускание argparse.FileType()('-')
как default
?
Я понимаю первую часть достаточно хорошо, но я не вижу, как это имеет к этому какое-то отношение. Что касается второго, что, если файл по умолчанию, который я использую, это ''/some/file'' вместо '' -''? – muru
'default = ap.FileType ('/ some/file')'. Значение по умолчанию просто не подлежит обработке определенным типом. – chepner
(Я проверяю исходный код, однако, чтобы убедиться, что у меня что-то не хватает. Это сложный процесс.) – chepner