single - python argparse true false flag




Argomento di posizione opzionale Argparse? (2)

Come estensione della risposta @VinaySajip. Ci sono altri nargs da menzionare .

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

N (un intero). N argomenti dalla riga di comando verranno raccolti insieme in un elenco

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

'*'. Tutti gli argomenti della riga di comando presenti sono raccolti in una lista. Nota che in genere non ha molto senso avere più di un argomento posizionale con nargs='*' , ma sono possibili più argomenti opzionali con nargs='*' .

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

'+'. Proprio come '*', tutti gli argomenti presenti sulla riga di comando sono raccolti in una lista. Inoltre, verrà generato un messaggio di errore se non è presente almeno un argomento della riga di comando.

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

argparse.REMAINDER . Tutti gli altri argomenti della riga di comando sono raccolti in una lista. Questo è comunemente utile per le utilità della riga di comando che vengono inviate ad altre utilità della riga di comando

Se l'argomento della parola chiave nargs non viene fornito, il numero di argomenti consumati è determinato dall'azione. Generalmente questo significa che verrà consumato un solo argomento da riga di comando e verrà prodotto un singolo elemento (non un elenco).

Ho uno script che deve essere usato in questo modo: usage: installer.py dir [-h] [-v]

dir è un argomento posizionale definito in questo modo:

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

Voglio che la cwd sia facoltativa: quando non è specificata dovrebbe essere semplicemente cwd .

Sfortunatamente quando non specifico l'argomento dir , ottengo l' Error: Too few arguments .


Usa nargs='?' (o nargs='*' se hai bisogno di più di una dir)

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

esempio esteso:

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