2014-04-03 3 views
19

Voglio ottenere tutti gli argomenti inutilizzati rimanenti in una volta. Come lo faccio?Ottenere gli argomenti rimanenti in argparse

parser.add_argument('-i', action='store', dest='i', default='i.log') 
parser.add_argument('-o', action='store', dest='o', default='o.log') 
+0

I non capisco cosa stai chiedendo Vuoi tutti gli argomenti della riga di comando non analizzati da argparse? – SingleNegationElimination

+1

Voglio ottenere tutti gli argomenti, che non prendo con 'parser.add_arguments'. È analogo all'interruttore predefinito nell'interruttore – ggoha

risposta

7

Un'altra opzione è quella di aggiungere un argomento posizionale per il parser. Specificare l'opzione senza trattini iniziali e argparse li cercherà quando non viene riconosciuta alcuna altra opzione. Questo ha il vantaggio di migliorare il testo di aiuto per il comando:

>>> parser.add_argument('otherthings', nargs='*') 
>>> parser.parse_args(['foo', 'bar', 'baz']) 
Namespace(i='i.log', o='o.log', otherthings=['foo', 'bar', 'baz']) 

e

>>> print parser.format_help() 
usage: ipython-script.py [-h] [-i I] [-o O] [otherthings [otherthings ...]] 

positional arguments: 
    otherthings 

optional arguments: 
    -h, --help show this help message and exit 
    -i I 
    -o O 
36

Uso parse_known_args():

args, unknownargs = parser.parse_known_args() 
+2

Ciò è utile quando gli argomenti sconosciuti possono avere trattini principali. Ad esempio, li stai passando ad un altro script. – Core

+0

* Questa * dovrebbe essere la risposta accettata! – MLu

+0

Non funziona se si desidera consentire il passaggio di nomi di argomenti in conflitto a un comando che si sta eseguendo, ad esempio in 'docker-compose-wrapper.py --help' vs' docker-compose-wrapper.py exec --help' – pdd

10

Uso argparse.REMAINDER:

parser.add_argument('rest', nargs=argparse.REMAINDER) 

Esempio estendere il vostro caso:

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('-i', action='store', dest='i', default='i.log') 
parser.add_argument('-o', action='store', dest='o', default='o.log') 
parser.add_argument('rest', nargs=argparse.REMAINDER) 
parser.parse_args(['hello', 'world']) 
>>> Namespace(i='i.log', o='o.log', rest=['hello', 'world']) 
+0

Questa è la migliore soluzione per i casi in cui si sta eseguendo un altro comando: 'wrapper.py --help' -> Il testo di aiuto ' wrapper.py alcuni argomenti --help' -> Passato a il comando avvolto – pdd