2015-04-09 4 views
0

мне нужно сделать следующее:Как обрабатывать отсутствующие аргументы в argparse?

  1. if были не аргумент для сценария переменной test == False
  2. elif был аргумент -t или --test переменная test == True
  3. else были еще аргументы, получить их в виде строки и перейти к третьему коду.

Теперь у меня есть ошибка:

# ./cli something 
usage: cli [-t] 
cli: error: unrecognized arguments: something 

Мой код для первых 2 шага:

import argparse 
parser = argparse.ArgumentParser(add_help=False) 
parser.add_argument('-t', '--test', action="store_true") 
args = parser.parse_args() 
if args.test is True: 
    intro = None 
+1

Никогда не используйте 'is' вместо' == 'для проверки равенства: не говорите, если args.test имеет значение True:' Вы можете просто сказать 'if args.test' – smci

+0

Что должно принадлежать' -t' в следующем случае: 'cli -t first second' ? 'first' и' second'? – RedX

+0

Вы не уверены в правильности условий 'if'. Покажите нам несколько предполагаемых случаев использования и то, что вы хотите, чтобы пространство имен args выглядело. – hpaulj

ответ

1

В argparse вам нужно, что в качестве отдельного параметра, например:

import argparse 
parser = argparse.ArgumentParser(add_help=False) 
parser.add_argument('-t', '--test', action="store_true") 
parser.add_argument('params', nargs='+') 
args = parser.parse_args() 
if args.test is True: 
    intro = None 
elif args.params: 
    pass # process the params here 
else: 
    pass # no params whatsoever