Explication détaillée du module argparse

1. Introduction au module argparse

argparse est une bibliothèque Python pour l'analyse des arguments de ligne de commande, qui fait partie de la bibliothèque standard Python. code stdlib basé sur python 2.7.

Le module argparse facilite l'écriture d'interfaces de ligne de commande conviviales. Le programme définit les arguments requis et argparse déterminera comment analyser ces arguments à partir de sys.argv (la ligne de commande). Le module argparse génère également automatiquement des messages d'aide et d'utilisation, et émet des erreurs lorsque l'utilisateur fournit des arguments non valides au programme.

2. Exemple sans utiliser argparse

Généralement, les commandes du terminal ne sont pas utilisées. Pour certains programmes nécessitant une affectation de variables, nous avons souvent :

  • 1. Écrivez en dur directement dans le programme (ou le fichier de configuration).
  • 2. Ou utilisez input pour entrer plusieurs fois sur la ligne de commande afin qu'il ne soit pas facile de déboguer et de modifier l'opération plusieurs fois. Voici un exemple :
import math

def cal_vol(radius,height):
    vol = math.pi * pow(radius,2) * height
    return vol

if __name__=='__main__':
    print(cal_vol(2,4))

argumenter

3. Exemple utilisant argparse

3.1 Exemple simple de argparse

Les principales étapes pour utiliser argparse :

  • Importez le package argparse ;
  • Créez un objet de paramètre ArgumentParser() ;
  • Appelez la méthode add_argument() pour ajouter des paramètres à l'objet paramètre ;
  • Utilisez parse_args() pour analyser l'objet de paramètre du paramètre ajouté afin d'obtenir l'objet d'analyse ; lorsque d'autres parties du programme doivent utiliser des paramètres de ligne de commande, utilisez l'analyse object.parameter pour obtenir.

Voici un exemple simple :

import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('radius', type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('height', type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

# 计算圆柱体积
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Remarque : étant donné qu'il n'est pas spécifié pour le moment, les paramètres de ligne de commande sont attribués dans l'ordre par défaut, et des ordres différents entraîneront des résultats différents.
insérez la description de l'image iciinsérez la description de l'image ici

La commande par défaut -h peut obtenir les informations d'aide définies lors de l'ajout de paramètres
insérez la description de l'image ici

  • L'entrée des paramètres de ligne de commande est assignée dans l'ordre par défaut, et des ordres différents donneront des résultats différents ;
  • La commande par défaut -h peut obtenir les informations d'aide définies lors de l'ajout de paramètres ;

3.2 Exemple avancé de argparse

Méthode add_argument() (définissant comment analyser les paramètres de la ligne de commande) :
insérez la description de l'image ici
les paramètres sont expliqués comme suit :

  • name ou flags - Un nom ou une liste de chaînes d'options, par exemple foo ou -f, --foo.

  • action - l'action lorsque la ligne de commande rencontre le paramètre, la valeur par défaut est store.

    • – store_const, indiquant que l'affectation est const;
    • – ajouter, stocker les valeurs rencontrées sous forme de liste, c'est-à-dire que si les paramètres sont répétés, plusieurs valeurs seront enregistrées ;
    • – append_const, qui enregistre une valeur définie dans la spécification de paramètre dans une liste;
    • - count, stocke le nombre de rencontres ; en outre, vous pouvez également hériter de argparse.Action pour personnaliser l'analyse des paramètres ;
  • nargs - le nombre d'arguments de ligne de commande qui doivent être lus, peut être

    • Un nombre spécifique, ou un nombre ?, lorsqu'une valeur n'est pas spécifiée, utilisez default pour l'argument positionnel et utilisez const pour l'argument facultatif
    • Ou signe *, indiquant 0 ou plusieurs paramètres ;
    • Ou un signe + signifie 1 ou plusieurs paramètres.
  • const - la valeur constante requise pour action et nargs.

  • default - la valeur par défaut lorsqu'aucun paramètre n'est spécifié.

  • type - Le type vers lequel l'argument de la ligne de commande doit être converti. La valeur par défaut est un type de chaîne.

  • choix - Un conteneur de valeurs autorisées pour le paramètre.

  • required - Indique si les paramètres facultatifs peuvent être omis (uniquement pour les paramètres facultatifs).

  • help - les informations d'aide du paramètre, lorsqu'elles sont spécifiées comme argparse.SUPPRESS signifie que les informations d'aide du paramètre ne seront pas affichées.

  • metavar - le nom du paramètre dans la description de l'utilisation, la valeur par défaut est le nom du paramètre pour le paramètre obligatoire et le nom du paramètre en majuscule pour le paramètre facultatif.

  • dest - le nom du paramètre analysé, par défaut le nom le plus long est choisi pour les paramètres facultatifs, les tirets sont convertis en traits de soulignement.

3.2.1 Réglages des paramètres optionnels
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

En ajoutant - - avant le nom du paramètre , il est défini comme paramètre facultatif. S'il n'est pas entré, la valeur par défaut sera utilisée (si la valeur par défaut n'est pas définie, la valeur par défaut sera Aucune), comme illustré dans l'exemple suivant :
insérez la description de l'image ici

3.2.2 Noms de référence des paramètres facultatifs
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

En définissant des paramètres facultatifs sur des noms de référence, les noms des paramètres peuvent être raccourcis et la saisie des paramètres de ligne de commande est simplifiée :
insérez la description de l'image ici

Comme suit : -r et - -radius sont disponibles
insérez la description de l'image ici
insérez la description de l'image ici

3.2.3 Effacer les informations de nom de paramètre dans l'aide
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Comme suit, par rapport aux informations affichées par -h dans 3.2.2, la raison de la suppression du nom du paramètre est
insérez la description de l'image ici:
Metavar affiche le nom du paramètre dans la description d'utilisation via -h.
Pour les paramètres obligatoires, la valeur par défaut est le nom du paramètre, et pour les paramètres facultatifs, la valeur par défaut est tous les paramètres en majuscules. Il ne sera pas affiché ici en le réglant sur vide.

3.2.4 Paramétrages obligatoires
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Lorsque required=True est défini , que le paramètre soit facultatif ou non, il doit être saisi, comme illustré dans l'exemple suivant :
insérez la description de l'image ici

3.2.5 Réglage de l'entrée des paramètres de liste (multi-paramètres)
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
    args = parse.parse_args()
    return args


if __name__ == '__main__':
    args = parse_args()
    print(args.num)
    for i in list(args.num):
        print(i)


argumenter

3.2.6 Utilisation de paramètres mutuellement exclusifs
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    group = parse.add_mutually_exclusive_group()  # 1、在参数对象中添加互斥组
    group.add_argument('-b', '--brief', action='store_true', help='print brief message')  # 2、在互斥组中添加参数(store_true默认当命令行未输入参数则为False,否则为True)
    group.add_argument('-v', '--verbose', action='store_true', help='print verbose message')
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    volume = cal_vol(args.radius, args.height)
    if args.brief:
        print(volume)
    elif args.verbose:
        print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume))
    else:
        print('Volume of Cylinder is %s' % (volume))

Dans la ligne de commande, b et v ne peuvent entrer qu'un seul des deux paramètres.
insérez la description de l'image ici

3.2.7 Réglages des paramètres par défaut

set_defaults() peut définir la valeur par défaut de certains paramètres

import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.set_defaults(height=4)
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))

insérez la description de l'image ici

4. Références

Acho que você gosta

Origin blog.csdn.net/craftsman2020/article/details/129237425
Recomendado
Clasificación