Wie benutzt man Python Argparse?

Ich fügte hinzu. Worauf Sie beim Argparse-Test achten sollten.


Verschoben nach hier und aktualisiert.


Skriptargumentspezifikationen

Ich möchte das Argument eines bestimmten Skripts wie folgt angeben.

Das Ergebnis der Implementierung solcher Spezifikationen mit argparse und der Anzeige mit --help ist wie folgt. Notieren Sie sich diese Implementierung ab dem nächsten Kapitel Schritt für Schritt.

$ ./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)

Erste Initialisierung

Ich denke, dass es für die meisten Anwendungen kein Problem mit anderen Standardeinstellungen als der Beschreibung gibt. Parameter, die Sie normalerweise verwenden würden, wie z. B. add_help (fügen Sie dem Parser die Option -h / –help hinzu), sind voraktiviert.

initialize


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

Argument hinzufügen

Teil 1

Parameter, die auf den Standardeinstellungen belassen werden können, werden ebenfalls angegeben. (Weil es schwierig ist zu wissen, was die Standardeinstellung ist, ohne auf die Hilfe zu schauen)

Der Pfadpfad src muss angegeben werden

Geben Sie im ersten Argument von add_argument den Namen 'path_root_src' ohne-oder-und Keine in nargs an. Dies führt zu einem Fehler "zu wenige Argumente", wenn im Skript keine anderen Argumente als "und" angegeben sind. Wenn nargs auf '?' Setzt und in Kombination mit Parametern wie default und const angegeben wird, kann das Skript fehlerfrei ausgeführt werden.

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)

Das erste hier angegebene Argument string'path_root_src 'wird als Attributname des Namespace-Objekts verwendet, das von args = parser.parse_args () zurückgegeben wird, das am endgültigen Ende aufgerufen wird. Das heißt, "/ Users / test / Pictures" wird in args.path_root_src gespeichert, wenn es wie folgt ausgeführt wird.

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

Teil 2

Die Angabe des dst-Verzeichnispfads ist nicht obligatorisch

Geben Sie im ersten Argument von add_argument und '?' In nargs zwei Arten von Optionszeichenfolgen an. Dies nimmt nach Möglichkeit ein Argument aus der Befehlszeile und verwendet es als Attributname 'path_root_dst' für das von args = parser.parse_args () zurückgegebene Namespace-Objekt und setzt den Wert des Arguments auf dieses Attribut. Wenn das Optionsargument selbst nicht vorhanden ist (-d selbst ist nicht angegeben), wird der Standardwert übergeben. Es wird ein optionales Argument angegeben, gefolgt vom Wert von const, wenn keine Befehlszeilenargumente vorhanden sind. Im folgenden Beispiel sind beide Keine, daher macht es nicht viel Sinn ...

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)

Teil 3

Ich möchte mehrere Erweiterungen der Zieldatei angeben

Geben Sie im ersten Argument von add_argument und '+' in nargs zwei Arten von Optionszeichenfolgen an. Dies erfordert mindestens ein Befehlszeilenargument, was zu einem Fehler "zu wenig Argument" führt, wenn die Bedingung nicht erfüllt ist. Der obige Fehler tritt jedoch nur auf, wenn -e angegeben wird, das Befehlszeilenargument jedoch nicht angegeben wird. Wenn -e selbst nicht angegeben wird, wird das standardmäßig angegebene [['jpg'] `verwendet und es tritt kein Fehler auf.

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)

Teil 4

Normalerweise möchte ich keine Druckanweisungen zum Debuggen in stdout drucken

Wenn ein optionales Argument angegeben ist und Sie einfach möchten, dass es True oder False hat, können Sie dies tun, indem Sie in Aktion'store_true'or'store_false 'angeben. Wenn dieses Skript mit --debug ausgeführt wird, wird True im Attributnamen "args.debug" des Namespace-Objekts gespeichert, das von "args = parser.parse_args ()" zurückgegeben wird, das am endgültigen Ende aufgerufen wird. ..

add_argument


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

Endgültiges Ende

Konvertiert die bisher angegebenen Argumente in ein Objekt, weist sie dem Attribut des Namespace-Objekts zu und lässt dieses Objekt zurückgeben. Standardmäßig wird die Argumentzeichenfolge aus sys.argv übernommen, sodass Sie hier im Argument nichts angeben müssen.

parse_args


args = parser.parse_args()

Ausführungsergebnis

Sie können sehen, dass das Attribut mit dem durch add_argument angegebenen Namen dem von parse_args zurückgegebenen Namespace-Objekt hinzugefügt wurde.

(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

Wie benutzt man Python Argparse?
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
Python: So verwenden Sie Async mit
[Python] Verwendung der Pandas-Serie
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
[Python] Zusammenfassung der Verwendung von Pandas
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
So installieren Sie Python
Verwendung von Pandas 2
So installieren und verwenden Sie pandas_datareader [Python]
Verwendung von Virtualenv
Verwendung von pytest_report_header
[Python] Verwendung von __command__, Funktionserklärung
So installieren Sie Python
Wie man Bio.Phylo benutzt
Verwendung von SymPy
[Python] Verwendung von import sys sys.argv
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
[Python] Organisieren der Verwendung für Anweisungen
Memorandum über die Verwendung von Gremlin Python
Verwendung von virtualenv
[Python2.7] Zusammenfassung der Verwendung von unittest
Wie benutzt man Matplotlib?
Verwendung von iptables
Python: Verwendung von Einheimischen () und Globalen ()
Wie benutzt man numpy?
Verwendung von __slots__ in der Python-Klasse
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Verwendung von "deque" für Python-Daten
Wie man Python-Kabusapi benutzt
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden