2009-12-21 4 views
5

Nach einer Weile mit dem Cmd.cmd Framework in Python, habe ich ein Problem festgestellt, ich weiß nicht, was ich tun soll. Außerdem glaube ich, dass das einige Stunden vorher funktioniert hat (oder ich bin einfach nur verrückt), also ist das noch seltsamer.Tab-Vervollständigung mit Python's Cmd.cmd

Ich habe den folgenden Beispielcode, getestet auf Windows- und Linux-Systemen (es ist also kein Windows-Problem), aber Tab-Vervollständigung funktioniert einfach nicht.

Wenn ich den exakt gleichen Code in Python 2 verwenden Sie es auf dem Linux-System funktioniert (nicht auf dem Windows ein, obwohl)

import cmd 
class Shell (cmd.Cmd):  
    def do_test (self, params): 
     print('test: ' + params) 

    def do_exit (self, params): 
     return True 

    def do_quit (self, params): 
     return True 

if __name__ == '__main__': 
    x = Shell() 
    x.cmdloop() 

Sie wissen, warum dies geschieht, oder was kann ich tun , um die Tab-Vervollständigung zu ermöglichen?

+0

Haben Sie die vollständigen_namen implementiert? –

+2

Die 'complete_XY'-Funktionen dienen zur Vervollständigung von Argumenten (also wenn ich 'test f' gebe, könnte es mir' test foobar' anbieten), aber die Vervollständigung von Befehlen wird automatisch aus allen verfügbaren' do_XY'-Funktionen generiert. Auch wenn ich die Tabulatortaste drücke, wird einfach eine Registerkarte in die Befehlszeile eingefügt, während bei einer nicht kompatiblen Beendigung nichts passieren sollte (weil die Funktionen dann eine leere Liste zurückgeben). – poke

Antwort

5

Es funktioniert tatsächlich für mich auf Linux sowohl auf Python 2 und 3. Allerdings wurde mein Python-Setup mit Readline-Unterstützung kompiliert, die für die automatische per cmd documentation erforderlich ist. Ich vermute, dass dein Linux Python 3 nicht damit kompiliert wurde.

Leider ist readline Unix-spezifisch. Eine Diskussion über andere Optionen unter Windows finden Sie unter python tab completion in windows.

+0

In diesem Fall kann der Entwickler dem Benutzer nur empfehlen, sein Python-Setup mit Readline-Unterstützung zu kompilieren (neben der Implementierung einer eigenen Version der Befehlsvervollständigung)? – Dennis