Mir ist bekannt, wie die automatische Vervollständigung von Python-Objekten im Python-Interpreter (unter Unix) eingerichtet wird.
- Google zeigt viele Treffer für Erklärungen dazu.
- Leider gibt es so viele Hinweise darauf, dass es schwierig ist zu finden, was ich tun muss, was etwas anders ist.
Ich muss wissen, wie man beliebige Elemente in einem in Python geschriebenen Befehlszeilenprogramm aktiviert, tab / automatisch vervollständigt.
Mein spezieller Anwendungsfall ist ein Befehlszeilen-Python-Programm, das E-Mails senden muss. Ich möchte in der Lage sein, E-Mail-Adressen automatisch zu vervollständigen (ich habe die Adressen auf der Festplatte), wenn der Benutzer einen Teil davon eingibt (und optional die TAB-Taste drückt).
Ich brauche es nicht, um unter Windows oder Mac zu arbeiten, nur Linux.
python
linux
unix
command-line
autocomplete
Paul D. Eden
quelle
quelle
Antworten:
Verwenden Sie Pythons
readline
Bindungen. Beispielsweise,Die offiziellen Moduldokumente sind nicht viel detaillierter. Weitere Informationen finden Sie in den Readline-Dokumenten .
quelle
Befolgen Sie die cmd-Dokumentation und alles wird gut
Ausgabe für Registerkarte -> Registerkarte -> Senden -> Registerkarte -> Registerkarte -> f -> Registerkarte
quelle
Da Sie in Ihrer Frage "NICHT Dolmetscher" sagen, möchten Sie wahrscheinlich keine Antworten mit Python-Readline und dergleichen. ( edit : im nachhinein ist das offensichtlich nicht der Fall. Ho hum. Ich denke, diese Info ist sowieso interessant, also lasse ich sie hier. )
Ich glaube , Sie könnten nach sein diese .
Es geht darum, beliebigen Befehlen die Vervollständigung auf Shell-Ebene hinzuzufügen und die eigene Vervollständigung der Registerkarten von bash zu erweitern.
Kurz gesagt, Sie erstellen eine Datei mit einer Shell-Funktion, die mögliche Vervollständigungen generiert, und speichern sie in
/etc/bash_completion.d/
und mit dem Befehl registrierencomplete
. Hier ist ein Ausschnitt von der verlinkten Seite:In diesem Fall erhalten Sie durch die Eingabe
foo --[TAB]
die Werte in der Variablenopts
, dh--help
,--verbose
und--version
. Für Ihre Zwecke möchten Sie im Wesentlichen die Werte anpassen, die eingegeben werdenopts
.Schauen Sie sich das Beispiel auf der verlinkten Seite an, es ist alles ziemlich einfach.
quelle
Ich bin überrascht, dass niemand argcomplete erwähnt hat. Hier ist ein Beispiel aus den Dokumenten:
quelle
Hier ist eine voll funktionsfähige Version des Codes, der von Ephemient hier sehr bereitgestellt wurde (danke).
quelle
quelle
readline.parse_and_bind('tab:complete')
durchreadline.parse_and_bind ("bind ^I rl_complete")
Sie können versuchen, die Python Prompt Toolkit zu verwenden , eine Bibliothek zum Erstellen interaktiver Befehlszeilenanwendungen in Python.
Die Bibliothek erleichtert das Hinzufügen interaktiver Funktionen zur automatischen Vervollständigung, sodass der Benutzer den TabSchlüssel verwenden kann, um die verfügbaren Optionen visuell zu durchlaufen. Die Bibliothek ist plattformübergreifend (Linux, OS X, FreeBSD, OpenBSD, Windows). Beispiel:
(Bildquelle: pcgli )
quelle
Die veröffentlichten Antworten funktionieren einwandfrei, aber ich habe eine Bibliothek mit automatischer Vervollständigung, die ich bei der Arbeit geschrieben habe, als Open-Source-Lösung bereitgestellt. Wir verwenden es seit einiger Zeit in der Produktion und es ist schnell, stabil und einfach zu bedienen. Es gibt sogar einen Demo-Modus, mit dem Sie schnell testen können, was Sie beim Eingeben von Wörtern erhalten würden.
Um es zu installieren, führen Sie einfach Folgendes aus:
pip install fast-autocomplete
Hier ist ein Beispiel:
Kasse: https://github.com/wearefair/fast-autocomplete für den Quellcode.
Und hier ist eine Erklärung, wie es funktioniert: http://zepworks.com/posts/you-autocomplete-me/
Es befasst sich mit Rechtschreibfehlern und optional dem Sortieren nach dem Gewicht des Wortes. (Nehmen wir an, es
burrito
ist wichtiger alsbook
, dann geben Sieburrito
eine höhere "Anzahl" an und es wird zuerstbook
in den Ergebnissen angezeigt.Wörter sind ein Wörterbuch und jedes Wort kann einen Kontext haben. Zum Beispiel die "Anzahl", wie das Wort angezeigt wird, ein anderer Kontext um das Wort herum usw. In diesem Beispiel hatten Wörter keinen Kontext.
quelle