2014-04-03 13 views
19

Ich möchte alle verbleibenden nicht verwendeten Argumente auf einmal erhalten. Wie mache ich es?Erhalten der verbleibenden Argumente 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 verstehe nicht ganz, was du verlangst. Möchten Sie, dass alle Befehlszeilenargumente nicht von argparse analysiert werden? – SingleNegationElimination

+1

Ich möchte alle Argumente bekommen, die ich nicht mit 'parser.add_arguments' nehme. In – ggoha

Antwort

7

Eine weitere Option ist ein Positions Argument zu Ihrem Parser hinzuzufügen. Geben Sie die Option ohne führende Bindestriche an, und argparse sucht nach ihnen, wenn keine andere Option erkannt wird. Dies hat den zusätzlichen Vorteil, den Hilfetext für den Befehl zu verbessern:

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

und

>>> 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

Verwendung parse_known_args():

args, unknownargs = parser.parse_known_args() 
+2

ist dies analog zum Standardwert. Dies ist hilfreich, wenn unbekannte Argumente führende Bindestriche enthalten können. Zum Beispiel geben Sie sie an ein anderes Skript weiter. – Core

+0

* Dies sollte die akzeptierte Antwort sein! – MLu

+0

Funktioniert nicht, wenn Sie das Übergeben von widersprüchlichen Argumentnamen an einen umzuleitenden Befehl zulassen möchten, z. B. in 'docker-compose-wrapper.py-help' und' docker-compose-wrapper.py exec-help' – pdd

10

Verwendung argparse.REMAINDER:

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

Beispiel zur Verlängerung der Fall:

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

Dies ist IMO die beste Lösung für Fälle, in denen Sie einen anderen Befehl umhüllen: 'wrapper.py --help' -> Ihr Hilfetext ' wrapper.py einige Argumente --help' -> übergeben an der umschlossene Befehl – pdd

Verwandte Themen