Eines der CLI-Frameworks von Python ist Cliff. Ich möchte Ihnen etwas sagen, von dem ich ein bisschen süchtig war.
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.
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.)
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