2013-04-05 17 views
35

È possibile richiedere che un argomento argparse sia uno dei pochi valori preimpostati?Consentire valori specifici per un argomento Argparse

Il mio approccio attuale sarebbe esaminare l'argomento manualmente e se non è uno dei valori consentiti chiamare print_help() e uscire.

Ecco l'implementazione attuale:

... 
parser.add_argument('--val', dest='val', action='store', 
         help='Special testing value') 

args = parser.parse_args(sys.argv[1:]) 
if args.val not in ['a','b','c']: 
    parser.print_help() 
    sys.exit(1) 

Non è che questo è particolarmente difficile, ma che sembra essere disordinato.

+0

Wow, hai risposto a questo veloce ... :-P – mgilson

+2

Ho fatto la domanda in IRC, non ho ricevuto risposta, e ho scritto tutto qui. Quando stavo lucidando la domanda, l'ho notato nei documenti. Poiché la domanda non era già su SO, sembrava un buon candidato per una risposta autonoma. – Moshe

+3

Sì. E secondo [meta] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-have-already-found-the-answer-to), questo è in accordo con il obiettivi di progettazione del sito. Con questo in mente, +1 a te (o è +2 :-P) – mgilson

risposta

56

Un argomento argparse può essere limitata ai valori specifici con il parametro choices:

... 
parser.add_argument('--val', dest='val', action='store', 
         choices=['a','b','c'], 
         help='Special testing value') 

args = parser.parse_args(sys.argv[1:]) 

Vedere la docs per maggiori dettagli.

+0

Hai risposto subito alla tua domanda? Perché preoccuparsi di chiedere? – viddik13

+5

Vedere i commenti sulla domanda. – Moshe

+1

'--val' e' dest = 'val'' è ridondante. Quest'ultimo può essere omesso e sarà derivato da '--val' –

Problemi correlati