2015-07-27 3 views
4

Я хочу, чтобы добавить аргумент с именем «печать» на мой аргумент парсерargparse аргумента с именем «печать»

arg_parser.add_argument('--print', action='store_true', help="print stuff") 
args = arg_parser.parse_args(sys.argv[1:]) 
if args.print: 
    print "stuff" 

Урожайность:

if args.print: 
      ^
SyntaxError: invalid syntax 

ответ

10

Вы можете использовать getattr() для доступа к атрибутам, которые, случается, reserved keywords тоже:

if getattr(args, 'print'): 

Однако, вы будете делать это самостоятельно гораздо проще, просто avoidi ng это имя в качестве места назначения; использовать print_ возможно (через dest argument):

arg_parser.add_argument('--print', dest='print_', action='store_true', help="print stuff") 
# ... 
if args.print_: 

или, более общим синонимом как verbose:

arg_parser.add_argument('--print', dest='verbose', action='store_true', help="print stuff") 
# ... 
if args.verbose: 

Быстрый демо:

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--print', dest='print_', action='store_true', help="print stuff") 
_StoreTrueAction(option_strings=['--print'], dest='print_', nargs=0, const=True, default=False, type=None, choices=None, help='print stuff', metavar=None) 
>>> args = parser.parse_args(['--print']) 
>>> args.print_ 
True 
+0

Использование 'Dest' для сохранения значения является хитроумный, я три раза читал документацию по аргрейсу и мог просто не понять это. Я приму это как ответ, когда это возможно. – crunsher