Python argparse игнорирует непризнанные аргументы
Optparse, старая версия просто игнорирует все непризнанные Аргументы и осуществляет. В большинстве ситуаций это не идеально и было изменено в argparse. Но есть несколько ситуаций, когда вы хотите игнорировать любые непризнанные Аргументы и анализировать те, которые вы указали.
например:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
можно ли как-то заменить это?
3 ответов
заменить
args = parser.parse_args()
С
args, unknown = parser.parse_known_args()
например,
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']
вы можете поместить оставшиеся части в новый аргумент с помощью parser.add_argument('args', nargs=argparse.REMAINDER)
Если вы хотите использовать их.
На самом деле argparse все еще "игнорирует"_unrecognized_args
. До тех пор, пока эти "непризнанные" аргументы не используйте префикс по умолчанию вы не услышите никаких жалоб от анализатора.
используя конфигурацию @anutbu, но со стандартным parse.parse_args()
, если мы должны были выполнить нашу программу со следующими аргументами.
$ program --foo BAR a b +cd e
у нас будет этот сбор данных с пространством имен для работы.
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
если бы мы хотели префикс по умолчанию -
игнорируется мы могли бы изменить ArgumentParser и решить, что мы будем использовать +
для наших "признанных" аргументов вместо этого.
parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')
одна и та же команда будет производить
Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')
положите это в трубку и курите его=)
кафе!