nargs - python parser tutorial




Argparse optionale Positionsargumente? (2)

Als eine Erweiterung zu @ VinaySajip Antwort. Es gibt weitere erwähnenswerte nargs .

  1. parser.add_argument('dir', nargs=1, default=os.getcwd())

N (eine Ganzzahl). N Argumente von der Befehlszeile werden zu einer Liste zusammengefasst

  1. parser.add_argument('dir', nargs='*', default=os.getcwd())

"*". Alle vorhandenen Befehlszeilenargumente werden in einer Liste zusammengefasst. Beachten Sie, dass es im Allgemeinen nicht sinnvoll ist, mehr als ein Positionsargument mit nargs='*' , aber mehrere optionale Argumente mit nargs='*' sind möglich.

  1. parser.add_argument('dir', nargs='+', default=os.getcwd())

'+'. Genau wie '*' werden alle vorhandenen Befehlszeilenargumente in einer Liste zusammengefasst. Darüber hinaus wird eine Fehlermeldung generiert, wenn nicht mindestens ein Befehlszeilenargument vorhanden war.

  1. parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())

argparse.REMAINDER . Alle verbleibenden Befehlszeilenargumente werden in einer Liste zusammengefasst. Dies ist normalerweise nützlich für Befehlszeilendienstprogramme, die an andere Befehlszeilendienstprogramme gesendet werden

Wenn das Schlüsselwort argument nargs nicht angegeben wird, wird die Anzahl der verbrauchten Argumente durch die Aktion bestimmt. Im Allgemeinen bedeutet dies, dass ein einzelnes Befehlszeilenargument verwendet wird und ein einzelnes Element (keine Liste) erstellt wird.

Ich habe ein Skript, das so verwendet werden soll: usage: installer.py dir [-h] [-v]

dir ist ein Positionsargument, das wie folgt definiert ist:

parser.add_argument('dir', default=os.getcwd())

Ich möchte, dass das cwd optional ist: Wenn es nicht angegeben ist, sollte es einfach cwd .

Leider, wenn ich das Argument dir nicht angeben, erhalte ich Error: Too few arguments .


Benutze nargs='?' (oder nargs='*' wenn Sie mehr als ein nargs='*' benötigen)

parser.add_argument('dir', nargs='?', default=os.getcwd())

erweitertes Beispiel:

>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]

positional arguments:
  dir

optional arguments:
  -h, --help  show this help message and exit
  -v




argparse