Документация argparse
достаточно хороша, но пропускает несколько полезных деталей, которые могут быть неочевидны.(@Diego Navarro уже упоминал кое-что из этого, но я попытаюсь немного расширить его ответ.) Основное использование выглядит следующим образом:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()
Объект, который вы получаете от parse_args()
, является пространством имен'объект: объект, чьи переменные-члены названы после ваших аргументов командной строки.Объект Namespace
- это способ доступа к аргументам и связанным с ними значениям:
args = parser.parse_args()
print args.my_foo
print args.bar_value
(обратите внимание, что argparse
заменяет '-' в именах аргументов подчеркиванием при именовании переменных.)
Во многих ситуациях вы можете использовать аргументы просто как флаги, которые не имеют значения.Вы можете добавить их в argparse следующим образом:
parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')
Выше будут созданы переменные с именами 'foo' со значением True и 'no_foo' со значением False соответственно:
if (args.foo):
print "foo is true"
if (args.no_foo is False):
print "nofoo is false"
Также обратите внимание, что вы можете использовать опцию «required» при добавлении аргумента:
parser.add_argument('-o', '--output', required=True)
Таким образом, если вы пропустите этот аргумент в командной строке, argparse
сообщит вам, что он отсутствует, и прекратит выполнение вашего скрипта.
Наконец, обратите внимание, что можно создать сложную структуру ваших аргументов с помощью функции vars
, если это облегчит вам жизнь.
args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']
Как видите,vars
возвращает dict с именами аргументов в качестве ключей, а их значения в качестве значений.
Существует множество других опций и вещей, которые вы можете сделать, но это должно охватывать наиболее важные, распространенные сценарии использования..