[PYTHON] Ein paar süchtig machende Informationen über Cliff, das CLI-Framework

Einführung

Eines der CLI-Frameworks von Python ist Cliff. Ich möchte Ihnen etwas sagen, von dem ich ein bisschen süchtig war.

Über Cliff

Weitere Informationen finden Sie unter hier. Ein Framework, das das Erstellen von CLI-Tools vereinfacht. Schreiben Sie einfach ein wenig und es wird gute Arbeit leisten, Programmwerte und --help zurückzugeben. Alles was Sie tun müssen, ist main.py zu erstellen und es jeder Befehlsklasse mit setup.py usw. zuzuordnen.

Informationen zur Cliff-Befehlsklasse

Die grundlegendste Befehlsklasse ist die Befehlsklasse. Es ist, als würde man einen Befehl geben, indem man diesen erbt.

sample.py


from cliff.command import Command

class SampleCommand(Command):
    #~~Was soll der Befehl tun?~~

Standardmäßig gibt es einige Klassen, die von der Command-Klasse erben. Wenn Sie nur ein Objekt zurückgeben möchten, können Sie ShowOne verwenden. Wenn Sie eine Liste von Objekten zurückgeben möchten, können Sie die Lister-Klasse erben. Wenn Sie ein Schlüssel- und Wertearray in der Klassenfunktion zurückgeben, , Es kann ohne Erlaubnis in eine Tabelle umgewandelt werden, oder es kann durch Angabe von Optionen in JSON oder YAML umgewandelt werden.

Grundsätzlich wird der Befehl wie folgt implementiert.

sample.py


from cliff.command import Command

class SampleCommand(Command):

    def get_parser(self, prog_name)
        parser = super().get_parser(prog_name)
        #Argument hinzufügen
        parser.add_argument('something')    #Erforderliche Argumente
        parser.add_argument('--some')       #Optionale Argumente
        parser.add_argument('--so', '-s')   #Sie können auch ein verkürztes System hinzufügen
        return parser

    def take_action(self, parsed_args):
        #Verarbeitung ausführen
        return something

Der Rückgabewert in der obigen take_action wird grundsätzlich zur Laufzeit zurückgegeben. (Genau genommen ist take_action in die Ausführungsfunktion eingeschlossen. Wenn Sie also verschiedene Dinge tun, wird es ein Chaos.)

Wovon ich süchtig war

Als ich versuchte, JSON zurückzugeben oder in take_action der Befehlsklasse zu diktieren, die die obige Befehlsklasse geerbt hat, war die Ausgabe des Befehls nur die Standardfehlerausgabe.

sample.py


import json
from cliff.command import Command

class SampleCommand(Command):

    def get_parser(self, prog_name)
        parser = super().get_parser(prog_name)
        parser.add_argument('arg1')
        return parser

    def take_action(self, parsed_args):
        #Verarbeitung ausführen
        return json.dumps(something)

shell.sh


samplecommand arg1 > log
#Aus irgendeinem Grund kommt der Ausgang im Terminal heraus!
samplecommand arg1 2> log
#Es erfolgt keine Ausgabe

Der Grund dafür ist, dass der Rückgabewert von take_action in einer Befehlsklasse, die von der Command-Klasse erbt, der Endstatus des Befehls ist. Mit anderen Worten

sample.py


from cliff.command import Command

class SampleCommand(Command):

    def get_parser(self, prog_name)
        parser = super().get_parser(prog_name)
        parser.add_argument('arg1')
        return parser

    def take_action(self, parsed_args):
        #Verarbeitung ausführen
        return 100

Wenn es wird

shell.sh


samplecommand arg1
echo $?
#100 Ausgänge

Es wird sein. Da JSON, dict und andere Objekte grundsätzlich als True beurteilt werden, ist der Rückgabewert aller Befehle 1, und wenn der Endstatus 1 ist, wird er als Fehler beurteilt und an die Standardfehlerausgabe ausgegeben.

Warum.

(Wenn es dir gut geht, wirf eine Pull-Anfrage)

Recommended Posts

Ein paar süchtig machende Informationen über Cliff, das CLI-Framework
Ein bisschen mehr über FIFO
Eine etwas tiefere Geschichte über Blockchain, die die digitale Welt ankreuzt
Nachdem ich die Python-Bibliothek recherchiert hatte, verstand ich ein wenig über ei.info.
Verschiedene Hinweise zum Django REST-Framework
Ein Memo, dass ich das Pyramid Tutorial ausprobiert habe
Holen Sie sich die neuesten AMI-Informationen mit der AWS CLI
Ein Java-Programmierer studierte Python. (Über Dekorateure)
Ich habe ein wenig über die wachsende API von TensorFlow nachgedacht
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Django REST Framework Ein wenig nützlich zu wissen.
Ein Memorandum über die Python-Tesseract-Wrapper-Bibliothek
Ein Hinweis zur neuen Stilbasisklasse
Ich habe ein wenig über die Klasse recherchiert