2016-06-23 9 views
0

Ich versuche, eine kleine REPL unter Verwendung der cmd Bibliothek in Python zu schreiben. Eine der Funktionen, die es bietet, ist die automatische Tab-Vervollständigung, die ich nicht möchte.Einstellung completekey = None entfernt Pfeil-nach-oben-Funktion

Glücklicherweise erwähnen die Dokumente "Wenn completekey nicht None ist und readline verfügbar ist, erfolgt die Befehlsvervollständigung automatisch." Also habe ich completekey=None gesetzt, als ich meine cmd.Cmd Unterklasse instanziierte, die funktionierte.

jedoch die Hauptfunktionalität des Moduls cmd, die Verwendung von readline die Unterstützung für Pfeil nach oben Geschichte gibt, war auch deaktiviert, und jetzt bin ich wieder zu ^[[A ‚s.

Warum passiert das und gibt es eine Lösung?

+0

kommt es vor, wahrscheinlich, weil, wenn 'completekey = None', das' readline' Modul nie geladen wird (siehe [die Quelle] (https://hg.python.org/cpython/file/3.5/Lib/ cmd.py). Sie können möglicherweise umgehen, indem Sie 'cmd.Cmd' ableiten, indem Sie entweder die' cmdloop'- oder überschreibenden 'complete'-Methoden außer Kraft setzen. – Evert

Antwort

2

Das Modul readline wird nur importiert, wenn einen Nicht-None-Wert hat. Es sieht so aus, als ob die einzige Möglichkeit, readline zu verwenden und die Beendigung zu deaktivieren, darin besteht, einen Do-Nothing-Completer anzugeben.

class CmdSubclass(Cmd): 
    # Other configuration 
    # ... 

    def complete(self, *args): 
     pass 
+0

Schön, danke! accepting. – Maltysen

+0

dies verhindert die Eingabe von Raw Tabs, aber ich denke, damit kann ich leben – Maltysen

+0

Sie können "completekey" auch auf etwas anderes setzen, das Sie nicht so oft verwenden müssen. – chepner

Verwandte Themen