Zerlegen Sie Befehlsargumente in einer Zeile in Python

Quelle

#!/usr/bin/env python

import sys

com = { i:j for i,j in [ (i[1][1:], sys.argv[i[0]+1] if len(sys.argv)>i[0]+1 and sys.argv[i[0]+1][0]!='-' else True ) for i in enumerate(sys.argv) if i[1][0]=='-'] }

print com

Wenn Sie dem obigen Programm ein Argument geben und es ausführen, ist es wie folgt. (Dateiname ist test.py)

$ ./test.py -a hoge -b gaga
{'a': 'hoge', 'b':'gaga'}
$ ./test.py -a hoge -b gaga -c
{'a': 'hoge', 'c': True, 'b': 'gaga'}

Danach können Sie so etwas wie einen Schaltkasten ausführen und dieses Diktierobjekt so herumtragen, wie es ist.

Kommentar

Fügen Sie zunächst Zeilenumbrüche und Kommentare hinzu, um das Verständnis zu erleichtern.

com = { i:j for i,j in  #Wörterbuch erstellen
        [ (i[1][1:], sys.argv[i[0]+1] if len(sys.argv)>i[0]+1 and sys.argv[i[0]+1][0]!='-' else True ) #Einen Taple erstellen
            for i in enumerate(sys.argv) if i[1][0]=='-' #Indizierung
        ]
      }

Die Erklärung kommt von hinten. Erstellen Sie zunächst einen Index. Wenn Sie nur den letzten Teil herausziehen

optIndex = [ i for i in enumerate(sys.argv) if i[1][0] == '-' ]

Weisen Sie sys.argv eine Nummer zu, in der Befehlsargumente mithilfe von enumerate gespeichert werden, und extrahieren Sie nur die Befehlsargumente, deren erstes Zeichen in der if-Anweisung enthalten ist. Wenn Sie es drucken, sieht es so aus.

$ ./test.py -a hoge -b gaga -c
optIndex: [(1, '-a'), (3, '-b'), (5, '-c')]

Erstellen Sie dann mit dem hier erhaltenen Index- und Optionsinformations-Taple "i" ein Tapple aus Optionszeichen und -werten. Mit anderen Worten, was Sie in der 2. und 3. Zeile in "[]" tun, ist wie "[(Schlüssel, Wert) für i in optIndex]". Der Schlüssel ist einfacher

[ i[1][1:] for i in optIndex ]

Kann als genommen werden. Es fühlt sich wie alles nach dem zweiten Zeichen der Position des optIndex-Werts an. (Nun, Sie können - vom ersten Zeichen separat setzen) Als nächstes folgt der Wert. Wenn Sie normalerweise nur den Wert verwenden, gehen Sie wie folgt vor.

[ sys.argv[i[0] + 1] for i in optIndex ]

Geben Sie einfach den nächsten Wert der Indexinformationen an. In diesem Fall müssen jedoch alle Optionen Werte annehmen, und Sie können so etwas wie "ls -a" nicht ausführen. Daher wird bestimmt, ob der Wert des Werts nicht mit beginnt - und ob sich der Wert, auf den der Index zeigt, in der Mitte des Arguments befindet. Wenn Sie in das Urteil verwickelt sind, fügen Sie True ein.

values = [ sys.argv[i[0]+1 if len(sys.argv) > i[0]+1 and sys.argv[i[0]+1][0]!='-' else True ]

Die zweite Zeile tippt nur auf diese beiden. Die erste Zeile konvertiert nur die abgetasteten Werte in ein Wörterbuch. Mit anderen Worten, machen Sie einfach "{i: j für i, j in optTuple}". Wie ich am Anfang erklärt habe, um all dies zusammenzustellen

com = { i:j for i,j in [ (i[1][1:], sys.argv[i[0]+1] if len(sys.argv)>i[0]+1 and sys.argv[i[0]+1][0]!='-' else True ) for i in enumerate(sys.argv) if i[1][0]=='-'] }

Abgeschlossen.

Zusammenfassung

Auch wenn Sie auf den ersten Blick nicht verstehen, können Sie es verstehen, indem Sie es zerlegen und von hinten verfolgen. Es gibt keine "Ist es nicht eine Bibliothek ohne dies zu tun?"

Recommended Posts

Zerlegen Sie Befehlsargumente in einer Zeile in Python
So empfangen Sie Befehlszeilenargumente in Python
Fizzbuzz in Python (in einer Zeile)
Segfo Python in einer Zeile
CGI Server (1) Python Edition in einer Zeile
[Python] Bool-Wertinversion in einer Zeile
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Ein Liner in Python
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
Mach ein Janken-Spiel in einer Zeile (Python)
[Einführung in Udemy Python3 + Application] 67. Befehlszeilenargumente
Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab
Geben Sie in Python einen Unterbefehl als Befehlszeilenargument an
Führen Sie externe Befehle mit Python aus
Versuchen Sie LINE Notify mit Python
Externe Befehlsausführung in Python
Ermöglichen Sie die Installation von in Python erstellten Befehlszeilentools
So geben Sie Befehlszeilenargumente beim Debuggen mit PyCharm an
[Python] Befehlszeilenargumente aus Dateiname oder Standard lesen
Drücken Sie einen Befehl in Python (Windows)
Inklusive Notation im Argument der Python-Funktion
Führen Sie den Shell-Befehl / Python in R aus
Primzahlaufzählung in einer Zeile
Ich habe Line Benachrichtigung in Python versucht
[Einführung] Fügen Sie Zeilenumbrüche in Python 3 ein
Implementiert in 1 Minute! LINE Benachrichtigen in Python
[Python] [3D-Liniendiagramm] Mehrere Daten in einem Diagramm, Achsenwerte in Zeichen
Erstellen Sie eine andere Version der Python-Conda-Umgebung mit einer Befehlszeile
[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Lernen Sie das Entwurfsmuster "Befehl" in Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Einzeiler webServer (mit CGI) in Python
[Python / Tkinter] Übergeben von Argumenten an den Befehl
Kombinieren Sie Python-Funktionsargumente zu einer einzigen Variablen
[Python] Lesen Sie die angegebene Zeile in der Datei
Hinweise Ich habe nachgeschlagen, um Befehlszeilentools in Python zu erstellen
Quadtree in Python --2
Python in der Optimierung
CURL in Python
[Python] So testen Sie den Befehlszeilen-Parser-Klick
Ein Liner, der neunundneunzig in Python ausgibt
Geokodierung in Python
SendKeys in Python
Registrieren Sie Funktionsargumente automatisch in argparse in Python
Metaanalyse in Python
Versuchen Sie, zwei Stapel in Python auf einem Array zu implementieren
Unittest in Python
Ein Liner, der die Kernauslastung von CPU 1 in Python zu 100% erhöht
Epoche in Python
Zwietracht in Python
Zusammenfassung der in Command Line Vol.8 verwendeten Tools
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Laden Sie den Befehl von yml mit Python und führen Sie ihn aus