почему parseargs хранит аргумент в списке - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть argparse, которому присваивается строка:

def f():
    return 'dummy2'

p = argparse.ArgumentParser()
p.add_argument('--a', nargs=1, type=str)
p.add_argument('--b', nargs='?', const=f(), default=f())
p.parse_args('--a dummy'.split())

Пространство имен синтаксического анализатора: Namespace(a=['dummy'], b='dummy2').

Как сделать так, чтобы аргумент для a был сохранен какстрока, а не как список строк?

1 Ответ

0 голосов
/ 10 февраля 2019

Все просто, просто пропустите аргумент для nargs.Попробуйте это:

p = argparse.ArgumentParser()
p.add_argument('--a', type=str)
p.add_argument('--b', nargs='?', const=f(), default=f())

Я полагаю, это то, что вы ожидали:

p.parse_args('--a dummy'.split())
=> Namespace(a='dummy', b='dummy2')

Цитирование документов :

ArgumentParser объектыобычно связывают один аргумент командной строки с одним действием, которое необходимо выполнить.Аргумент ключевого слова nargs связывает разное количество аргументов командной строки с одним действием.Поддерживаемые значения:

N (целое число).N аргументов из командной строки будут собраны в список ... Обратите внимание, что nargs = 1 создает список из одного элемента.Это отличается от значения по умолчанию, при котором элемент создается сам по себе.

...