single - python argparse true false flag




Argparse: argomenti richiesti elencati in "argomenti opzionali"? (2)

Io uso il seguente codice semplice per analizzare alcuni argomenti; si noti che è richiesto uno di questi. Sfortunatamente, quando l'utente esegue lo script senza fornire l'argomento, il testo di utilizzo / guida visualizzato non indica che esiste un argomento non facoltativo, che trovo molto confuso. Come posso ottenere python per indicare che un argomento non è facoltativo?

Ecco il codice:

import argparse
if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Foo')
    parser.add_argument('-i','--input', help='Input file name', required=True)
    parser.add_argument('-o','--output', help='Output file name', default="stdout")
    args = parser.parse_args()
    print ("Input file: %s" % args.input )
    print ("Output file: %s" % args.output )

Quando si esegue il codice sopra senza fornire l'argomento richiesto, ottengo il seguente risultato:

usage: foo.py [-h] -i INPUT [-o OUTPUT]

Foo

optional arguments:
    -h, --help            show this help message and exit
    -i INPUT, --input INPUT
                          Input file name
    -o OUTPUT, --output OUTPUT
                          Output file name

Compilazione di @Karl Rosaen

parser = argparse.ArgumentParser()
optional = parser._action_groups.pop() # Edited this line
required = parser.add_argument_group('required arguments')
# remove this line: optional = parser...
required.add_argument('--required_arg')
optional.add_argument('--optional_arg')
parser._action_groups.append(optional) # added this line
return parser.parse_args()

e questo produce:

usage: main.py [-h] [--required_arg REQUIRED_ARG]
           [--optional_arg OPTIONAL_ARG]

required arguments:
  --required_arg REQUIRED_ARG

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

Dal momento che preferisco elencare gli argomenti richiesti prima facoltativi, ci giro attorno tramite:

    parser = argparse.ArgumentParser()
    parser._action_groups.pop()
    required = parser.add_argument_group('required arguments')
    optional = parser.add_argument_group('optional arguments')
    required.add_argument('--required_arg')
    optional.add_argument('--optional_arg')
    return parser.parse_args()

e questo produce:

usage: main.py [-h] [--required_arg REQUIRED_ARG]
               [--optional_arg OPTIONAL_ARG]

required arguments:
  --required_arg REQUIRED_ARG

optional arguments:
  --optional_arg OPTIONAL_ARG

Posso vivere senza che 'help' compaia nel gruppo di argomenti facoltativo.







argparse