C++ - command line interface
Bin ich derzeit der Gestaltung einer linux-c++ - Anwendung. Es wird von der Kommandozeile aus gestartet, dann einmal läuft, muss ich in der Lage sein, Befehle zu erteilen, die Kontrolle Ihrer Ausführung, im Idealfall so etwas wie die folgenden:
$ sudo ./myapplication
APP >
APP >
APP > //just pressing return
APP > openlog test1.txt //APP will now call the openlog function
APP >
Ich denke, das ist eine relativ einfache Aufgabe, aber ich habe keine Ahnung, was so eine Schnittstelle aufgerufen werden würde, um zu suchen ein. Weiß jemand, der eine Bibliothek oder ein Beispiel, das diese Funktion ausführen können? Oder muss ich das schreiben meiner eigenen mit cout und cin? Wenn dem so ist, wäre es keine bevorzugte Ansatz?
- C++ muss nicht nachdenken. Sie haben für die Arbeit rund um die.
- Wenn Sie nicht wissen, wie Sie dies tun, sollten Sie nicht das schreiben von Anwendungen, die von der superuser....
- Es ist hyperbolische zu sagen, dass diese Anwendung ausgeführt werden muss durch die su, und mehr, so zu sagen, jemand sollte nicht beim schreiben von Anwendungen, die ausgeführt werden, durch den super-user aufgrund einer wahrgenommenen Kompetenz.
- Ich war, geht aus der Bemerkung, APP wird jetzt rufen Sie die Funktion openlog. Es ist zwar möglich, in Sprachen wie C# für einen Benutzer, geben Sie den Namen einer beliebigen Funktion, wie auch als argument Werten, mit der spiegelung, etwas zu tun, um diesen Effekt in C++ ist nicht ganz so leicht oder robust.
- Willst du REPL (en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop )? Oder etwas anderes?
- danke. Ich löschte meinen Kommentar, als ich sah, PLPiper Antwort und erkannte, was Sie waren immer an. Ich habe nicht sofort die Verbindung herstellen.
- Sorry, ich hätte mich klarer, ich war immer in der Erwartung, werden über einen Schalter oder etwas ähnliches zum anzeigen von strings zu Befehlen.
- Sie können diese C++ - Bibliothek. Es ist tragbar, leicht zu bedienen, hat eine automatische Vervollständigung und Befehls-history, und optional farbige Ausgabe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich empfehlen, die GNU-readline-Bibliothek für das. Es kümmert sich um die mühsame Arbeit zu bekommen Zeilen der Eingabe, und ermöglicht dem Benutzer zu Bearbeiten, seine Linie mit der Rücktaste, Links und rechts Pfeile, etc, und erinnern ältere-Befehl mithilfe der up-Pfeil, und suchen Sie sogar nach älteren Befehl mit ^R usw. Readline kommt installiert mit typischen unix-artigen Distributionen, wie linux, aber wenn Sie es nicht haben, können Sie finden es hier.
Edit: Hier ist eine minimal readline-Beispiel:
Den GNU readline Mediathek ist ideal, wenn Sie wollen full-line-editing-und history-Funktionen, aber wenn eine einfache Aufforderung reicht (oder wenn Sie nicht wollen, dass die GNU-Lizenz), dann können Sie dies mit nur der standard-Bibliothek:
Ich Stimme mit Chris ' Kommentar, dass dieser schwerer wird, in einer Sprache, die nicht reflektierend. In C++ müssen Sie explizit anzeigen, was auch immer Sie eingeben, um eine bestimmte Funktion zu.
Wenn du gehst zu Rollen Sie Ihre eigenen, Ihre Allgemeine design sollte in etwa so Aussehen:
In eine reflektierende Sprache, die erste Hälfte ist wesentlich vereinfacht, da Sie möglicherweise in der Lage, zu konvertieren einen string direkt in einen Funktionsnamen.
std::getline
überstd::istream::getline
.GNU readline ist mit Abstand eine hervorragende Auswahl, wie es andere vorgeschlagen haben. Wenn die Lizenzierung betrifft würde Sie zwingen, dies ausschließen, dann sollten Sie sich dann überlegen,linenoise.
Müssen Sie mindestens teilweise Rollen Sie Ihre eigenen. GNU readline in der Lage sein könnte, um zu helfen leicht, check-out http://en.wikipedia.org/wiki/GNU_readline für ein kurzes Programm, das "Skelett", dass dies gelingt und um die Sie können tatsächlich fügen Sie code hinzu.
Sollten Sie vielleicht einen Blick auf die readline-Bibliothek. Es hat ein bisschen eine Lernkurve, aber es ist immer noch wesentlich einfacher als neu eine vollständige CLI auf Ihrem eigenen. Überprüfen Sie die Lizenzierung, da es nicht angemessen für Ihr Projekt.
Ein bisschen spät, aber was solls...
Nur, damit Sie wissen über die CLI-toolkit-Projekt hatte, wurden speziell für diesen Bedarf:
http://sourceforge.net/projects/aroyer-cli/
Bewusst sein, die GPL-Lizenz von GNU Readline.
In den Antworten, Leute haben erwähnt, die GPL-Lizenz von GNU readline. In dieser Antwort möchte ich auf die Auswirkungen der GPL-Lizenz - die neue Benutzer/Entwickler möglicherweise übersehen.
Text kopiert aus https://en.wikipedia.org/wiki/GNU_Readline
Diese Bibliothek scheint genau das zu tun, was OP ist gefragt für:
Es ist im wesentlichen ein wrapper um die readline-Bibliothek, aber analysiert/wirft die Argumente von Ihr Funktionen auf Ihre jeweiligen Typen:
Es funktioniert mit Funktions-Zeigern und lambdas.
Schreiben Sie Ihre Anwendung wie TCL oder python-Anwendung und nutzen Sie Sie als front-end.