C'était gênant de gérer séparément les arguments de la ligne de commande et les paramètres du fichier de configuration, donc j'ai pensé qu'il serait bien de trouver un analyseur capable de gérer les deux à la fois, alors je l'ai vérifié.
ConfigArgParse https://github.com/bw2/ConfigArgParse
S'il n'est pas trop utilisé, ce sera EOL, alors vérifiez-le légèrement
~$ apt-cache rdepends python3-configargparse
python3-configargparse
Reverse Depends:
python3-certbot
snakemake
bdfproxy
python3-azure-devtools
prometheus-pgbouncer-exporter
cloudprint
Le plus important est "cerbot" qui est un client de Let's Encrypt, ou "bdfproxy" pour les gens de sécurité, n'est-ce pas?
Vérifiez également les formats pris en charge.
# how to specify a key-value pair (all of these are equivalent):
name value # key is case sensitive: "Name" isn't "name"
name = value # (.ini style) (white space is ignored, so name = value same as name=value)
name: value # (yaml style)
--name value # (argparse style)
Vérifiez que le séparateur d'espace, le format .ini et le format yaml sont pris en charge par défaut. J'étais content s'il y avait un format json si possible, mais c'est bien car il correspond au style yaml le plus utilisé dans un rayon de 5 m.
L'environnement de test est ubuntu 19.04 La dernière version est la 0.14.0 (13 janvier 2019) en amont à partir du 1er octobre 2019, mais je ne veux pas considérer les correctifs de sécurité, etc. en fonctionnement, donc j'utiliserai le package de la distribution ci-dessus.
$ sudo apt install python3-configargparse
$ dpkg -l python3-configargparse
Demande=(U)inconnue/(I)Installation/(R)Effacer/(P)完全Effacer/(H)Rétention
|Statut=(N)Rien/(I)installée/(C)Réglage/(U)Déploiement/(F)Réglage失敗/(H)Semi-installé/(W)
|/Erreur?=(Vide)Rien/(R)Réinstallation requise(Statut,Majuscule d'erreur=Anormal)
||/Nom Version Architecte Description
+++-======================-============-============-===========================
ii python3-configargparse 0.13.0-1 all replacement for argparse wi
lines 1-6/6 (END)
#!/usr/bin/env python3
import configargparse
def parse_args():
cp = configargparse.ArgumentParser(
default_config_files=['./.arg_parse.yaml']
)
cp.add_argument(
'-c', '--conf',
dest='config',
is_config_file=True,
help='config file path',
)
cp.add_argument(
'-f', '--flag',
dest='flag',
action="store_true",
help='true or false flag'
)
cp.add_argument(
'-s', '--str',
type=str,
required=True,
dest='string',
help='requirement string'
)
cp.add_argument(
'-i', '--int',
type=int,
dest='intager',
default=50,
help='default intager',
)
cp.add_argument(
'-a', '--array',
dest='array',
action='append',
default=[],
help='array parama',
)
return cp.parse_args()
def main():
args = parse_args()
print(args)
main()
Fichier de configuration (exemple de format yaml)
$ cat .arg_parse.yaml
str: hogehoge
int: 3
array: [1, 12, 35, 40]
Résultat d'exécution 1 Fichier de configuration uniquement
$ ./test_conf.py
Namespace(array=['1', '12', '35', '40'], config=None, flag=False, intager=3, string='hogehoge')
Résultat d'exécution 2 Lorsque le fichier de configuration et l'argument de ligne de commande sont utilisés
$ ./test_conf.py -i 1111 -s fugafuga -f
Namespace(array=['1', '12', '35', '40'], config=None, flag=True, intager=1111, string='fugafuga')
"Store_true" est défini par défaut sur "False" et "store_false" sur "True". J'étais confus quant à savoir si c'était le contraire, mais il semble bon de penser qu'il sera respectivement Vrai et Faux lorsqu'il est spécifié par des arguments de ligne de commande.
Je pense que c'est bien de gérer argparse et configparse séparément et de ne pas être accro à n'en changer qu'un.
Recommended Posts