Argparse Python: valeur par défaut ou valeur spécifiée


174

Je voudrais avoir un argument facultatif qui par défaut à une valeur si seul le drapeau est présent sans valeur spécifiée, mais stocker une valeur spécifiée par l'utilisateur au lieu de la valeur par défaut si l'utilisateur spécifie une valeur. Une action est-elle déjà disponible pour cela?

Un exemple:

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

Je peux créer une action, mais je voulais voir s'il existait un moyen de le faire.

Réponses:


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='?' signifie 0 ou 1 arguments
  • const=1 définit la valeur par défaut lorsqu'il n'y a aucun argument
  • type=int convertit l'argument en int

Si vous souhaitez test.pydéfinir examplesur 1 même si aucun --examplen'est spécifié, incluez default=1. Autrement dit, avec

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

puis

% test.py 
Namespace(example=1)

Comment faire cela avec des chaînes? J'ai un dilemme avec la différenciation de "" (chaîne vide par défaut) et "" (chaîne vide entrée par l'utilisateur). Dans le code pour l'instant, j'utilise la valeur par défaut et comme j'ai besoin de faire quelques opérations, j'ai quelque chose comme ça self.foo = (args.bar or some_else_source).upper(). Il cassera sur Aucun objet AFAIUC.
0andriy

16

En fait, il vous suffit d'utiliser l' defaultargument add_argumentcomme dans ce 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

Les détails sont ici .


7

La différence entre:

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

et

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

est ainsi:

myscript.py => le débogage est 7 (par défaut) dans le premier cas et "Aucun" dans le second

myscript.py --debug => debug vaut 1 dans chaque cas

myscript.py --debug 2 => debug est 2 dans chaque cas

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.