Wie man eine Command Line Interface oder einen Interpreter in Python macht

Jungs. Ich habe hier einige CLI-Fragen gesehen, aber ich möchte diese Frage noch ausführlicher beantworten.

Ich habe bereits class1.py, class2.py, etc. mit Funktionen entwickelt, die in jeder Klasse implementiert sind. ZB Operator.py hat add, minus, time, devide Funktionen. Wie kann ich eine Befehlszeilenschnittstelle für diese Klassen erstellen?

Auch für diese CLI, ist es eine unendliche Schleife innerhalb der main () für Interaktion?

Und wie kann die CLI etwas Feedback geben, wie zB den Benutzer für den nächsten Vorgang vorschlagen oder den richtigen Befehl eingeben oder geben Sie –help und überprüfen Sie alle verfügbaren Befehle. Wie die Bash-Muscheln.

Auch dort scheint es optparse module aus python Gibt es einige gute, komplette oder qualitativ hochwertige Samples, die zeigen, wie eine CLI gebaut wird? Ich möchte diese Chance nutzen, um zu lernen, wie man ein CLI Programm schreibt.

Was ich will ist: Ich habe bereits mehrere Klassen entwickelt, und auch eine GUI, um die Methoden aus diesen Klassen aufzurufen. Jetzt möchte ich eine CLI haben, wie die GUI, um diese Klassen zu verwenden. ZB habe ich Klassen wie CDContainer (mit Methode wie addCD, removeCD, etc.), CD (mit Methode wie spielen, stop, pause) und ich habe eine GUI, die interagiert werden könnte. Jetzt möchte ich eine CLI haben, die unter dem bash, ich konnte diese CLI laufen und call createCDContainer, addCD, removeCD Befehle.

Wenn ich cmd verwende,

class CDContainerCLI(cmd.Cmd): def do_CDContainer(self, line): print "create CD container" def do_addcd(self, line): print "add cd into the container" 

Wie kann ich hier einige Optionen hinzufügen? ZB möchte ich addcd –track 3 –cdname thriller Ich denke "–track 3 –cdname thriller" sind sie die 4 Argumente für die addcd Funktion. Wie kann ich das umsetzen?

5 Solutions collect form web for “Wie man eine Command Line Interface oder einen Interpreter in Python macht”

Leiten Sie aus cmd.Cmd und überschreiben die verschiedenen Methoden nach Bedarf.

StackOverflow – Wie schreibe ich eine Shell in Python

Verwenden Sie das cmd-Modul:

  • Referenz: Benutzerdefinierte (interaktive) Shell mit Python

Andere Pakete

Sie können auch verschiedene Module verwenden, die auf Pypi gehostet werden, die auf dem cmd-Modul aufgebaut sind

Ich bin mir nicht sicher, wohin du suchst: Es scheint, dass du eine interaktive Shell bauen willst, aber du optparse auch optparse , die entworfen ist, um die Erstellung einer Modulschnittstelle zu rationalisieren, die von der System-Shell ausgeführt werden kann, anstatt zu versorgen Eine Schale an sich.

Es sieht so aus, your_script the_command --argument value --other-argument du, dass dein Modul eine eigene interaktive Shell implementiert, aber vielleicht möchtest du auch einige Kommandos von der Kommandozeile aus zugänglich machen, zB indem your_script the_command --argument value --other-argument direkt von bash oder was haben Sie. Dies ist die Art von Dingen, die optparse zur Verfügung stellen soll, aber es ist zugunsten von argparse veraltet argparse . argparse befindet sich in der Python 2.7 Standardbibliothek und kann standardmäßig (zB als Abhängigkeit Ihres Moduls oder durch separate Installation via PyPI etc.) für ältere Pythons installiert werden.

argparse macht es relativ einfach, bestimmte Optionen oder Unterbefehle zu Einstiegspunkten (dh Funktionsaufrufe) in deinem Code zu verknüpfen. Die Dokumentation ist sehr detailliert, und lohnt sich eine gründliche lesen, wenn Sie wahrscheinlich wollen, um ein paar solcher Schnittstellen zu machen. Für fortgeschrittene Nutzung können Sie einige interessante Sachen machen, und machen Sie Ihren Code ein bisschen mehr überschaubar, indem Sie eine benutzerdefinierte Aktion .

Ich denke, was er fragt, ist, wie man problemlos mit optionalen Argumenten in der interaktiven Shell umgehen kann. Wenn man also das Programm benutzt, sieht es so aus:

 $ myprogram (Cmd) addcd --track 3 --cdname thriller 

So läuft mein Programm öffnet sich seine eigene Eingabeaufforderung, an die Befehle wie addcd ausgegeben werden können, zusammen mit optionalen Argumenten und dann verarbeitet werden.

Der beste Weg, dies zu tun, denke ich, wäre, argparse zusammen mit cmd . Statt sys.argv parse_args , kann die parse_args Methode eine Liste von Strings übergeben werden. So etwas wie unten:

 def do_addcd(self, line): parser = argparse.ArgumentParser(prog='addcd') parser.add_argument('--track', type=int) parser.add_argument('--cdname') args = parser.parse_args(line.split()) newcd = CD(args.track, args.cdname) 

Das Problem, so etwas zu tun, wie ich es selbst herausgefunden habe, indem ich versuche, genau so etwas zu tun, ist, dass parse_args dazu neigt, das gesamte Programm zu verlassen, wenn man es mit der falschen Anzahl von Argumenten parse_args , unter anderen Fehlern. Das gewünschte Verhalten in diesem Anwendungsfall wäre, einfach zurück zu Ihrem benutzerdefinierten interaktiven Shell zu verlassen, aber das wird nicht einfach sein, ohne entweder einige hacky Workaround oder Unterklassen ArgumentParser und parse_args .

  • Kann nicht argparse, um zitierte Zeichenfolge mit Bindestrichen darin zu lesen?
  • Python interaktive CLI-Anwendung?
  • Python-CLI-Programmeinheitsprüfung
  • Wie lese ich von stdin oder aus einer Datei, wenn keine Daten in Python geleitet werden?
  • Python ist die beste Programmiersprache der Welt.