Dokumentation
Confconsole - Plugins System (für Entwickler)
ConfConsole-Menüoptionen können einfach über Plugins hinzugefügt werden.
Plugins sind Python-Quelldateien, die im ConfConsole-Verzeichnis abgelegt werden. ConfConsole lädt alle relevanten Dateien und stellt sie dem Benutzer als Menüoptionen zur Verfügung.
Wie werden Plugins geladen?
Zunächst wird ein Baum aus "plugins.d" generiert. Jedes Verzeichnis ist ein Menü oder Untermenü und jedes ausführbare .py-Script ist ein Eintrag im Menü des übergeordneten Verzeichnisses. plugins.d Es hat keine Beschreibung, da es nicht aus einem Menü ausgewählt wurde.
Für jedes Plugin im Baum wird der Hauptteil (Top-Level) des Plugins ausgeführt. Aus diesem Grund sollten Sie hier nichts anderes als setupbezogenen Code einfügen {wo?} und Sie sollten sich definitiv nicht darauf verlassen, dass andere Plugins bereits eingerichtet werden. Beachten Sie, dass zusätzliche Variablen und Funktionen, die für Plugins verfügbar sind, an dieser Stelle NOT verfügbar sind.
Das Plugin .py file(s) docstring bietet die Beschreibung für den Menüeintrag in confconsole. Um eine Menüeingabebeschreibung für ein Verzeichnis festzulegen, legen Sie eine Text-"Beschreibungs" -Datei im Verzeichnis fest.
Als nächstes wird die doOnce Funktion (optional) wird einmal ausgeführt, nachdem jedes Plugin geladen wurde. Beachten Sie, dass, während alle Plugins geladen werden, nicht alle Plugins an dieser Stelle bereit sein werden. Aber du hast die Fähigkeit, mit ihnen zu arbeiten, wenn du es willst.
Schließlich run Funktion wird ausgeführt, wenn der Menüeintrag Ihres Plugins in confconsole angeklickt wird. run Funktion ist in einem Plugin nicht vorhanden, dann wird der Menüeintrag nicht erstellt.
Wie interagiere ich mit dem Nutzer?
Die console Die Variable ist eine Instanz des Console Es ist eine einfache Schnittstelle, die pythondialog-wrapper verwendet, um grundlegende Konsolen-Gui-Funktionalität zu ermöglichen. Dies wird, wie bei allen anderen Globalen, verfügbar sein, sobald die doOnce Beachten Sie, dass Sie NEVER jede Interaktion erzwingen sollten, bis confconsole vollständig gestartet ist. Dies könnte beispielsweise zu Problemen bei Headless-Builds führen, die in der Lage sein werden, usage (erster Bildschirm von confconsole) vor jeder Interaktion.
Folgende Methoden sind erhältlich von console:
- infobox(text)
zeigt Text auf dem Bildschirm an, dies ist NOT-Blockierung, wenn Sie möchten, dass die Box momentan blockiert wird
time.sleep(seconds)Im Nachhinein, sonst wird diese üblicherweise zur Anzeige von Informationen während eines lang andauernden Betriebs verwendet.0 zurückgibt.
Beispiel:
console.infobox("some text")
- yesno(text)
zeigt Text auf dem Bildschirm mit einer Ja/Nein-Aufforderung an. gibt 0 zurück, wenn ja, 1 wenn nein.
Beispiel:
console.yesno("Are you sure?")
- msgbox(title, text, button_label="ok")
Standardmäßig zeigt Text auf dem Bildschirm mit einer ok-Eingabeaufforderung an. das ok kann über Button-Etikett in alles geändert werden. gibt 0 zurück
Beispiel:
console.msgbox("Warning", "You may need to restart for changes to take effect")
- inputbox(title, text, init='', ok_label="OK", cancel_label="Cancel")
Zeigt Text auf dem Bildschirm im Titel an, der mit einem Eingabefeld versehen ist (beginnend mit dem Wert)
init) und eine ok/cancel-Prompt, die über dieok_labelundcancel_labelArgumente.Gibt ein Tupel von (0 if ok oder 1 if cancel, human_input) zurück.
Beispiel:
console.inputbox("Email", "Please enter you're email address", "user@example.com")
- Menü (Titel, Text, Auswahl, no_cancel=False)
Zeigt Text auf dem Bildschirm in der betitelten Box zusammen mit einer Liste von auswählbaren Optionen (Auswahlmöglichkeiten) und optional einer Löschtaste an.
Eine Auswahl sollte eine Liste oder ein Tupel der Länge 2 sein, wobei jedes Element eines jeden Tupels eine Liste von Strings ist. Die erste Stringsammlung sind die Item-Namen, die zweite die Item-Beschreibungen.
Gibt ein Tupel von (0 wenn ok oder 1 wenn annullieren, Option) zurück.
- Beispiel:
- console.menu("Lieblingsnummer", "wählen Sie eine Nummer",)
- [
[ '1', "Dummy Description for 1" ], [ '2', "Dummy Description for 2" ], [ '3', "Dummy Description for 3" ]
]
)
- form(title, text, fields, ok_label="Apply", cancel_label="Cancel")
Zeigt Text auf dem Bildschirm im Titelfeld zusammen mit einer Reihe von beschrifteten Eingabefeldern und einer Eingabeaufforderung an / Abbrechen an (Tastenetiketten können über Etikettenargumente geändert werden)
- Die Felder müssen eine Sammlung von
(label, item, field_length, input_length)
wo
labelist eine Zeichenfolge, die vor dem Eingabefeld angezeigt wird unditemist der Standardtext, der in der Eingabe des Feldes geschrieben wurde.field_length und input_length sind ganze Zahlen, die jeweils die Anzahl der Zeichen angeben, die für die Darstellung des Feldes verwendet werden, und die maximale Anzahl von Zeichen, die Diese Werte bestimmen auch die Schreibbarkeit von Feldern.
Wenn field_length 0 ist, kann es nicht geändert werden und sein Inhalt bestimmt die Größe.
Wenn field_length negativ ist, kann das Feld nicht verändert werden und das Gegenteil von field_length bestimmt seine Größe.
wenn die Eingabelänge 0 ist, wird sie auf field_length gesetzt
Der Rückgabewert ist ein Tupel von (Status, Felder), wobei der Status (0, wenn ok oder 1 wenn annulliert) ist, und Felder sind der Wert, der für jedes Feld in der Reihenfolge eingegeben wird.
Konsole ist im Wesentlichen nur ein Wrapper für python dialog. Obwohl nicht alle Methoden und nicht alle Argumente zu diesen Methoden offengelegt werden, gilt die Dokumentation für den Python-Dialog immer noch largly.
http://pythondialog.sourceforge.net/doc/
Wie interagiere ich mit anderen Plugins?
Für die Inter-Plugin-Kommunikation gibt es einige Optionen, erstens gibt es die imp* Es ist wichtig, dass Sie es für Plugins verwenden und nicht für normale import wie die imp*
Eine Funktion gibt eine Version mit den zusätzlichen Globals zurück.
import wird als normale Python-Datei geladen.
Die imp-Funktionen sind wie folgt:
- impByName
- tut genau das, was es impliziert, gibt eine Liste aller Plugins zurück, die mit dem Vornamen übereinstimmen
- impByDir
- gibt eine Liste aller Plugins innerhalb des angegebenen Verzeichnisnamens zurück (das ist ein Unterverzeichnis von plugins.d)
- impByPath
- Gibt ein einzelnes Plugin zurück, das dem genauen relativen Pfad von plugins.d entspricht
Neben diesen imp-Funktionen gibt es einen gemeinsamen EventManager zwischen allen Plugins, der auch für die Cross-Plugin-Kommunikation genutzt werden kann. Dieser Ereignismanager wird als Variable exponiert eventManager
Der Event-Manager ist ziemlich einfach. Events können jedes hashbare Objekt sein, obwohl es normalerweise sinnvoller ist, etwas Offensichtliches wie einen String zu verwenden. Ebenso ist ein Ereignis-Handler ein beliebiges aufrufbares Objekt, aber normalerweise eine Funktion.
Es gibt 3 Funktionen, die vom Event Manager ausgesetzt sind
- add_event(name)
- Dies fügt ein Ereignis der Liste der Ereignisse hinzu, die dem Ereignismanager gehören, und gibt eine Komfortfunktion zurück, die das Ereignis auslöst. Beachten Sie, dass diese Komfortfunktion genau das ist und nicht notwendig ist.
- add_handler(name, handler)
- Wenn das Ereignis nicht existiert, wird es still erstellt. Diese Funktion gibt None zurück.
- fire_event(name)
- Dies ruft jeden Handler in der Reihenfolge auf, in der er für das jeweilige Ereignis registriert wurde.
Sonstige Informationen
Für ein Beispiel für ein mindestens gültiges Plugin, überprüfen Sie plugins.d/example.py, um es in Aktion zu sehen chmod +x plugins.d/example.py und führen Sie confconsole.
Um Beispiele für andere Funktionen zu sehen, sehen Sie bitte den Quellcode der anderen bereitgestellten Plugins.