Comment utiliser Python Argparse

J'ai ajouté. Ce qu'il faut surveiller dans le test argparse.


Déplacé et mis à jour vers ici.


Spécifications des arguments de script

Je souhaite spécifier l'argument d'un certain script comme suit.

Le résultat de l'implémentation de telles spécifications en utilisant argparse et en affichant avec --help est le suivant. Notez étape par étape cette implémentation dans le chapitre suivant.

$ ./photosort.py --help
usage: photosort.py [-h] [-d [PATH_ROOT_DST]]
                    [-e SORT_FILES_EXTENTIONS [SORT_FILES_EXTENTIONS ...]]
                    [--debug]
                    path_root_src

This script is ...

positional arguments:
  path_root_src         Directory path where your taken photo files are
                        located.

optional arguments:
  -h, --help            show this help message and exit
  -d [PATH_ROOT_DST], --path-root-dst [PATH_ROOT_DST]
                        Directory path where you want to create date folder
                        and locate photo files. (default: same as source
                        directory)
  -e SORT_FILES_EXTENTIONS [SORT_FILES_EXTENTIONS ...], --sort-files-extentions SORT_FILES_EXTENTIONS [SORT_FILES_EXTENTIONS ...]
                        Extentions of file which you want to sort. (default:
                        jpg)
  --debug               debug mode if this flag is set (default: False)

Première initialisation

Je pense qu'il n'y a aucun problème pour la plupart des utilisations avec les valeurs par défaut autres que la description. Les paramètres que vous utiliseriez normalement, tels que add_help (ajoutez l'option -h / –help à l'analyseur), sont pré-activés.

initialize


parser = argparse.ArgumentParser(description='This script is ...')

Ajouter un argument

Partie 1

Les paramètres qui peuvent être conservés aux valeurs par défaut sont également spécifiés. (Car il est difficile de savoir quelle est la valeur par défaut sans regarder l'aide)

Le chemin du répertoire src doit être spécifié

Dans le premier argument de add_argument, spécifiez le nom'path_root_src 'without-or-and None dans nargs. Cela entraînera une erreur "trop peu d'arguments" si aucun argument autre que les options-et-n'est spécifié dans le script. Si nargs est défini sur '?' Et spécifié en combinaison avec des paramètres tels que default et const, le script peut être exécuté sans erreur.

add_argument


parser.add_argument('path_root_src', \
        action='store', \
        nargs=None, \
        const=None, \
        default=None, \
        type=str, \
        choices=None, \
        help='Directory path where your taken photo files are located.', \
        metavar=None)

Le premier argument string'path_root_src 'spécifié ici est utilisé comme nom d'attribut de l'objet Namespace renvoyé par ʻargs = parser.parse_args () appelé à la fin finale. En d'autres termes, "/ Users / test / Pictures" est stocké dans ʻargs.path_root_src lorsqu'il est exécuté comme suit.

$ ./photosort.py /Users/test/Pictures

Partie 2

La spécification du chemin du répertoire dst n'est pas obligatoire

Spécifiez deux types de chaînes de caractères d'option dans le premier argument de add_argument et '?' Dans nargs. Cela prendra un argument de la ligne de commande si possible et l'utilisera comme nom d'attribut «chemin_racine_dst» pour l'objet d'espace de noms retourné par «args = parser.parse_args ()» et définira la valeur de l'argument sur cet attribut. Si l'argument d'option lui-même n'existe pas (-d lui-même n'est pas spécifié), la valeur par défaut est transmise. Un argument facultatif est spécifié, suivi de la valeur de const s'il n'y a pas d'arguments de ligne de commande. Dans le cas de l'exemple ci-dessous, les deux sont Aucun, donc cela n'a pas beaucoup de sens ...

add_argument


parser.add_argument('-d', '--path-root-dst', \
        action='store', \
        nargs='?', \
        const=None, \
        default=None, \
        type=str, \
        choices=None, \
        help='Directory path where you want to create date folder and locate photo files. (default: same as source directory)', \
        metavar=None)

Partie 3

Je souhaite spécifier plusieurs extensions du fichier cible

Spécifiez deux types de chaînes de caractères d'option dans le premier argument de add_argument et '+' dans nargs. Cela nécessite au moins un argument de ligne de commande, ce qui entraîne une erreur «trop peu d'arguments» si la condition n'est pas remplie. Cependant, l'erreur ci-dessus se produit uniquement lorsque -e est spécifié mais que l'argument de ligne de commande n'est pas spécifié. Si -e lui-même n'est pas spécifié, le ['jpg'] spécifié par défaut sera utilisé et aucune erreur ne se produira.

add_argument


parser.add_argument('-e', '--sort-files-extentions', \
        action='store', \
        nargs='+', \
        const=None, \
        default=['jpg'], \
        type=str, \
        choices=None, \
        help='Extentions of file which you want to sort. (default: jpg)', \
        metavar=None)

Partie 4

Je ne veux généralement pas imprimer les instructions d'impression pour le débogage dans stdout

Si un argument optionnel est spécifié et que vous voulez simplement qu'il ait True ou False, vous pouvez le faire en spécifiant 'store_true' ou 'store_false' en action. Si ce script est exécuté avec --debug, alors True sera stocké dans le nom d'attribut ʻargs.debugde l'objet Namespace retourné par ʻargs = parser.parse_args ()pour l'appel à la fin finale. ..

add_argument


parser.add_argument('--debug', \
        action='store_true', \
        help='debug mode if this flag is set (default: False)')

Finale finale

Convertissez les arguments spécifiés jusqu'à présent en un objet, affectez-le à l'attribut de l'objet Namespace et renvoyez cet objet. Par défaut, la chaîne d'argument est tirée de sys.argv, vous n'avez donc pas besoin de spécifier quoi que ce soit dans l'argument ici.

parse_args


args = parser.parse_args()

Résultat d'exécution

Vous pouvez voir que l'attribut avec le nom spécifié par add_argument a été ajouté à l'objet Namespace renvoyé par parse_args.

(Pdb) b 112
Breakpoint 1 at /Users/dodo5522/Development/manage_media_data/photosort.py:112
(Pdb) c
> /Users/dodo5522/Development/manage_media_data/photosort.py(112)<module>()
-> args = parser.parse_args()
(Pdb) n
(Pdb) dir(args)
['__class__', '__contains__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_args', '_get_kwargs', 'debug', 'path_root_dst', 'path_root_src', 'sort_files_extentions']
(Pdb) args.debug
(Pdb) print args.debug
False
(Pdb) print args.path_root_dst
/Users/dodo5522/Public
(Pdb) print args.path_root_src
/Users/dodo5522/Pictures
(Pdb) print args.sort_files_extentions
['jpg', 'png', 'mov']
(Pdb)

Recommended Posts

Comment utiliser Python Argparse
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Python: comment utiliser async avec
[Python] Comment utiliser la série Pandas
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
[Python] Résumé de l'utilisation des pandas
[Introduction à Python] Comment utiliser la classe en Python?
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment installer Python
Comment utiliser Pandas 2
Comment installer et utiliser pandas_datareader [Python]
Comment utiliser Virtualenv
Comment utiliser pytest_report_header
[python] Comment utiliser __command__, explication des fonctions
Comment installer python
Comment utiliser Bio.Phylo
Comment utiliser SymPy
[Python] Comment utiliser import sys sys.argv
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
[Python] Organisation de l'utilisation des instructions
Mémorandum sur l'utilisation du python gremlin
Comment utiliser virtualenv
[Python2.7] Résumé de l'utilisation d'unittest
Comment utiliser Matplotlib
Comment utiliser iptables
python: Comment utiliser les locals () et globals ()
Comment utiliser numpy
Comment utiliser __slots__ dans la classe Python
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser "deque" pour les données Python
Comment utiliser python-kabusapi
Comment utiliser le zip Python et énumérer
[Python] Comprendre comment utiliser les fonctions récursives