2009-12-21 11 views
5

Après avoir testé un certain temps avec le cadre Cmd.cmd en python, je remarque un problème que je ne sais pas quoi faire. De plus, je crois que cela fonctionne quelques heures avant (ou je suis juste fou), donc c'est encore plus bizarre.la touche de tabulation avec Cmd.cmd Python

J'ai le code exemple suivant, testé sur les systèmes Windows et Linux (il est donc pas un problème Windows), mais la complétion ne fonctionne tout simplement pas.

Si je l'exacte même code en Python 2 ne fonctionne sur le système Linux (pas sur celle de Windows si)

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() 

Savez-vous pourquoi cela se produit, ou ce que je peux faire , pour rendre l'achèvement de l'onglet possible?

+0

Avez-vous mis le complete_namehere? –

+2

Les fonctions 'complete_XY' sont pour l'achèvement des arguments (quand je rentre' test f' il pourrait me proposer FooBar test), mais l'achèvement des commandes est généré automatiquement à partir de toutes les fonctions 'do_XY' disponibles. Aussi quand j'appuie sur tabulation, il met simplement un onglet à la ligne de commande, alors que rien ne devrait arriver quand il n'y a pas de complétion compatible (parce que les fonctions renvoient alors une liste vide). – poke

Répondre

5

Cela fonctionne réellement pour moi sur Linux à la fois sur Python 2 et 3. Cependant, mon installation de python a été compilé avec le support readline, qui est requis pour qu'il soit automatique par le cmd documentation. Je soupçonne que votre Linux Python 3 n'a pas été compilé avec.

Malheureusement, readline est Unix spécifique. Voir python tab completion in windows pour une discussion des autres options sur Windows.

+0

Donc, dans ce cas, le développeur ne peut que recommander à l'utilisateur de compiler son installation Python avec le support readline (en plus d'implémenter sa propre version d'achèvement de la commande)? – Dennis

Questions connexes