Python argparse: valore predefinito o valore specificato


174

Vorrei avere un argomento facoltativo che imposterà un valore predefinito se è presente solo la bandiera senza valore specificato, ma memorizzare un valore specificato dall'utente anziché il valore predefinito se l'utente specifica un valore. Esiste già un'azione disponibile per questo?

Un esempio:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Posso creare un'azione, ma volevo vedere se esisteva un modo esistente per farlo.

Risposte:


273
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' significa argomenti 0-o-1
  • const=1 imposta il valore predefinito quando ci sono 0 argomenti
  • type=int converte l'argomento in int

Se si desidera test.pyimpostare examplesu 1 anche se non --exampleè stato specificato nessuno , includere default=1. Cioè, con

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

poi

% test.py 
Namespace(example=1)

Come fare questo con le stringhe? Ho un dilemma con la differenziazione di "" (stringa vuota come impostazione predefinita) e "" (stringa vuota come immessa dall'utente). Nel codice per ora sto usando l'impostazione predefinita e poiché ho bisogno di fare alcune operazioni, ho qualcosa di simile self.foo = (args.bar or some_else_source).upper(). Si romperà su Nessuno oggetto AFAIUC.
0andriy,

16

In realtà, devi solo usare l' defaultargomento add_argumentcome in questo test.pyscript:

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

I dettagli sono qui .


7

La differenza tra:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

e

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

è quindi:

myscript.py => il debug è 7 (per impostazione predefinita) nel primo caso e "Nessuno" nel secondo

myscript.py --debug => il debug è 1 in ciascun caso

myscript.py --debug 2 => il debug è 2 in ciascun caso

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.