Python argparse: как изменить `--add` на`add`, оставаясь необязательным аргументом?
Я хочу эту функциональность:
$ python program.py add Peter
'Peter' was added to the list of names.
Я могу добиться этого с --add
вместо add
как это:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--add", help="Add a new name to the list of names",
action="store")
args = parser.parse_args()
if args.add:
print "'%s' was added to the list of names." % args.add
else:
print "Just executing the program baby."
Такой что:
$ python program.py --add Peter
'Peter' was added to the list of names.
Но когда я меняюсь --add
в add
это больше не является обязательным, как я могу позволить ему быть необязательным, но не иметь тех, --
приметы? (предпочтительно также с использованием argparse
библиотека)
2 ответа
То, что вы хотите, на самом деле называется "позиционные аргументы". Вы можете разобрать их так:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("cmd", help="Execute a command",
action="store", nargs='*')
args = parser.parse_args()
if args.cmd:
cmd, name = args.cmd
print "'%s' was '%s'-ed to the list of names." % (name, cmd)
else:
print "Just executing the program baby."
Что дает вам возможность указывать различные действия:
$ python g.py add peter
'peter' was 'add'-ed to the list of names.
$ python g.py del peter
'peter' was 'del'-ed to the list of names.
$ python g.py
Just executing the program baby.
Вы можете использовать подкоманды для достижения этого поведения. Попробуйте что-то вроде следующего
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title='Subcommands',
description='valid subcommands',
help='additional help')
addparser = subparsers.add_parser('add')
addparser.add_argument('names', nargs='*')
args = parser.parse_args()
if args.names:
print "'%s' was added to the list of names." % args.names
else:
print "Just executing the program baby."
Обратите внимание, что использование nargs='*'
Значит это args.names
теперь список, в отличие от вашего args.add
, так что вы можете добавить произвольное количество имен после add
(вам придется изменить способ обработки этого аргумента). Вышеуказанное можно затем назвать следующим образом:
$ python test.py add test
'['test']' was added to the list of names.
$ python test.py add test1 test2
'['test1', 'test2']' was added to the list of names.