Essayez d'utiliser l'API d'action de Python argparse

Un module argparse pratique pour obtenir des arguments en Python. Si vous spécifiez une action dans add_argument, vous pouvez définir comment stocker la valeur en cas d'argument. Le plus couramment utilisé est peut-être de spécifier store_true et de l'utiliser simplement pour marquer.

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("--hoge", action="store_true")
>>> args = parser.parse_args(["--hoge"])
>>> args.hoge
True

Donc, si vous passez un objet qui implémente l'API à cette action, vous pouvez effectuer toutes les préparations, j'ai donc essayé de l'utiliser.

argparse.Action Ecrivez une classe qui hérite de ʻargparse.Action et a une méthode call` selon la documentation argparse.

print_action.py


import argparse

class PrintAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        print "[{}] option add value [{}] as attr [{}]".format(
                option_string, values, self.dest)
        setattr(namespace, self.dest, values)

La méthode __call__ doit recevoir les quatre arguments suivants.

--parser: objet ArgumentParser add_argument --space: objet d'espace de noms retourné par parse_args () --values: valeurs d'argument. Si le type de add_argument est spécifié, le type est converti en premier. --ʻOption_string`: Chaîne d'option lorsqu'il s'agit d'un argument d'option. Non passé s'il s'agit d'un argument positionnel.

Essayez d'utiliser la PrintAction ci-dessus.

>>> import argparse
>>> from print_action import PrintAction
>>>
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("--hoge", action=PrintAction)
>>> args = parser.parse_args("--hoge huga".split(' '))
[--hoge] option add value [huga] as attr [hoge]
>>> args.hoge
'huga'

Fondamentalement, après avoir traité correctement les valeurs, vous pouvez l'ajouter à l'espace de noms en utilisant le nom de l'argument («self.dest») comme nom d'attribut.

Exemple

Prenez un entier ou <int> [KMG] comme argument, et dans ce dernier cas convertissez-le en un entier ʻaction`.

calc_suffix_action.py


import argparse

class CalcSuffixAction(argparse.Action):
    def __init__(self, option_strings, dest, nargs=None, **kwargs):
        """
Optionnel.`add_argument`Ici si vous voulez déterminer si les autres arguments sont appropriés pour l'action
Cette fois`__call__`Recevoir en méthode`values`Parce que je pense que ce n'est pas une liste
        `nargs`Essayez de limiter.
        """
        if nargs is not None and nargs != '?':
            raise ValueError("Invalid `nargs`: multiple arguments not allowed")
        super(CalcSuffixAction, self).__init__(option_strings, dest, **kwargs)

    def __call__(self, parser, namespace, values, option_string=None):
        try:
            if values.endswith('K'):
                digit = int(values[:-1]) * 1000
            elif values.endswith('M'):
                digit = int(values[:-1]) * 1000000
            elif values.endswith('G'):
                digit = int(values[:-1]) * 1000000000
            elif not isinstance(values, int):
                digit = int(values)
            else:
                digit =	values

        except ValueError:
            parser.error("Invalid argument ({})".format(values))

        setattr(namespace, self.dest, digit)

Je vais essayer.

>>> import argparse
>>> from calc_suffix_action import CalcSuffixAction
>>>
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("--hoge", action=CalcSuffixAction)
>>>
>>> parser.parse_args("--hoge 1024".split(' '))
Namespace(hoge=1024)
>>> parser.parse_args("--hoge 4K".split(' '))
Namespace(hoge=4000)
>>> parser.parse_args("--hoge 32M".split(' '))
Namespace(hoge=32000000)
>>> parser.parse_args("--hoge 1G".split(' '))
Namespace(hoge=1000000000)
>>> parser.parse_args("--hoge 3T".split(' '))
usage: [-h] [--hoge HOGE]
: error: Invalid argument (3T)

Recommended Posts

Essayez d'utiliser l'API d'action de Python argparse
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser Kubernetes Client -Python-
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API PeeringDB 2.0
Essayez d'utiliser l'API Admin de la passerelle Janus
Acquisition de données à l'aide de l'API googlemap de python
Essayez Python
Essayez d'utiliser LevelDB avec Python (plyvel)
Essayez d'utiliser le module Python Cmd
Exécutez Ansible à partir de Python à l'aide de l'API
Essayez d'utiliser LeapMotion avec Python
Essayez d'utiliser Amazon DynamoDB à partir de Python
Fonctionnement de la souris à l'aide de l'API Windows en Python
Essayez une formule utilisant Σ avec python
Dialogflow (anciennement: API.AI) Essayez d'utiliser le SDK Python #dialogflow
Essayez d'utiliser Python avec Google Cloud Functions
Essayez d'utiliser le script de validation Python # 2 On-box de Junos
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Essayez d'utiliser Excel en utilisant Python (Xlwings)
Essayez d'utiliser le script d'opération Python # 1 On-box de Junos
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser Cookiecutter
Essayez d'utiliser des géopandas
Essayez d'utiliser Selenium
Essayez d'utiliser scipy
Python> essayez: / sauf:
Essayez d'utiliser pandas.DataFrame
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser PyODE
Scraping à l'aide de Python
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Python: essayez d'utiliser l'interface utilisateur sur Pythonista 3 sur iPad
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Essayez d'utiliser le framework Web Python Tornado Partie 1
Jugons les émotions à l'aide de l'API Emotion en Python
Création récente de classement à l'aide de l'API Qiita avec Python
Manipulez des objets à l'aide de l'API Python de bas niveau de Blender 2.8
Essayez d'utiliser le module de collections (ChainMap) de python3
Téléchargement anonyme d'images à l'aide de l'API Imgur (à l'aide de Python)
Essayez d'utiliser tensorflow ① Créez un environnement python et introduisez tensorflow
Essayez d'utiliser l'API kabu station de au Kabucom Securities
Essayez d'utiliser le framework Web Python Tornado Partie 2
Essayez d'accéder à l'API YQL directement depuis Python 3
Essayez de gratter avec Python.