J'ai ajouté. Ce qu'il faut surveiller dans le test argparse.
Déplacé et mis à jour vers ici.
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)
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 ...')
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
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)
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)
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)')
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()
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