Versuchen Sie es mit der Aktions-API von Python argparse

Ein praktisches Argparse-Modul zum Abrufen von Argumenten in Python. Wenn Sie in add_argument eine Aktion angeben, können Sie festlegen, wie der Wert gespeichert werden soll, wenn ein Argument vorhanden ist. Vielleicht wird am häufigsten "store_true" angegeben und einfach zum Markieren verwendet.

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

Wenn Sie also ein Objekt übergeben, das die API für diese Aktion implementiert, können Sie alle Vorbereitungen treffen, also habe ich versucht, es zu verwenden.

argparse.Action Schreiben Sie eine Klasse, die argparse.Action erbt und eine __call__ -Methode gemäß argparse-Dokumentation hat.

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)

Die Methode call sollte die folgenden vier Argumente erhalten.

--parser: add_argument ArgumentParser-Objekt --space: Namespace-Objekt, das von parse_args () zurückgegeben wird --Werte: Argumentwerte. Wenn der Typ von add_argument angegeben ist, wird der Typ zuerst konvertiert. --option_string: Optionszeichenfolge, wenn es sich um ein Optionsargument handelt. Nicht für Positionsargumente übergeben.

Versuchen Sie es mit der obigen "PrintAction".

>>> 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'

Grundsätzlich können Sie "Werte" nach entsprechender Verarbeitung zum "Namespace" hinzufügen, indem Sie den Argumentnamen ("self.dest") als Attributnamen verwenden.

Beispiel

Nehmen Sie eine Ganzzahl oder " [KMG]" als Argument und konvertieren Sie sie im letzteren Fall in eine Ganzzahl "action".

calc_suffix_action.py


import argparse

class CalcSuffixAction(argparse.Action):
    def __init__(self, option_strings, dest, nargs=None, **kwargs):
        """
Optional.`add_argument`Hier, wenn Sie feststellen möchten, ob die anderen Argumente für eine Aktion geeignet sind
Diesmal`__call__`In Methode empfangen`values`Weil ich erwarte, dass das keine Liste ist
        `nargs`Versuchen Sie zu begrenzen.
        """
        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)

Ich werde es versuchen.

>>> 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

Versuchen Sie es mit der Aktions-API von Python argparse
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Kubernetes Client -Python-
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der PeeringDB 2.0-API
Versuchen Sie es mit der Admin-API von Janus Gateway
Datenerfassung mit Python Googlemap API
Versuchen Sie Python
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen Sie es mit dem Python Cmd-Modul
Führen Sie Ansible über Python mithilfe der API aus
Versuchen Sie es mit LeapMotion mit Python
Versuchen Sie es mit Amazon DynamoDB von Python
Mausbedienung mit Windows-API in Python
Versuchen Sie eine Formel mit Σ mit Python
Dialogflow (früher: API.AI) Verwenden Sie das Python SDK #dialogflow
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Versuchen Sie es mit Junos 'On-Box Python # 2 Commit Script
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Versuchen Sie es mit Junos 'On-Box Python # 1 Op Script
Erstellen einer Google-Tabelle mit der Python / Google Data-API
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit Geopandas
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Python> try: / außer:
Versuchen Sie es mit pandas.DataFrame
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Scraping mit Python
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
Lassen Sie uns Emotionen mithilfe der Emotions-API in Python beurteilen
Letzte Ranglistenerstellung mit der Qiita-API mit Python
Bearbeiten Sie Objekte mit der einfachen Python-API von Blender 2.8
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Anonymer Upload von Bildern mit der Imgur-API (mit Python)
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Versuchen Sie es mit der Kabu Station API von au Kabucom Securities
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Versuchen Sie, direkt von Python 3 aus auf die YQL-API zuzugreifen
Versuchen Sie es mit Python.