Annuaire d'articles
-
-
- 1. Introduction au module argparse
- 2. Exemple sans utiliser argparse
- 3. Exemple utilisant argparse
-
- 3.1 Exemple simple de argparse
- 3.2 Exemple avancé de argparse
-
- 3.2.1 Réglages des paramètres optionnels
- 3.2.2 Noms de référence des paramètres facultatifs
- 3.2.3 Effacer les informations de nom de paramètre dans l'aide
- 3.2.4 Paramétrages obligatoires
- 3.2.5 Réglage de l'entrée des paramètres de liste (multi-paramètres)
- 3.2.6 Utilisation de paramètres mutuellement exclusifs
- 3.2.7 Réglages des paramètres par défaut
- 4. Références
-
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))
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.
La commande par défaut -h peut obtenir les informations d'aide définies lors de l'ajout de paramètres
- 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) :
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 :
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 :
Comme suit : -r et - -radius sont disponibles
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
:
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 :
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)
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.
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))