2009-12-21 9 views
5

Después de probar un rato con el framework Cmd.cmd en python, noté un problema que no sé qué hacer. Además creo que esto funciona unas horas antes (o estoy loco), así que esto es aún más extraño.Finalización de pestañas con Cmd.cmd de Python

Tengo el siguiente código de ejemplo, probado en sistemas Windows y Linux (por lo que no es un problema de Windows), pero la finalización de pestañas simplemente no funciona.

Si utilizo el exactamente el mismo código en Python 2 que funciona en el sistema Linux (no en el de Windows aunque)

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

¿Conoce por qué sucede esto, o lo que puede hacer , para hacer que la tabulación sea posible?

+0

¿Has implementado el nombre completo aquí? –

+2

Las funciones 'complete_XY' son para completar los argumentos (de modo que cuando ingreso' test f' podría ofrecerme 'test foobar'), pero la finalización de los comandos se genera automáticamente a partir de todas las funciones' do_XY' disponibles. Además, cuando presiono la pestaña, simplemente coloca una pestaña en la línea de comandos, mientras que no debería pasar nada cuando no hay una finalización compatible (porque las funciones devuelven una lista vacía). – poke

Respuesta

5

Realmente funciona para mí en Linux tanto en Python 2 como en 3. Sin embargo, mi configuración de python fue compilada con soporte de lectura, que es necesario para que sea automática según el cmd documentation. Sospecho que Linux Python 3 no fue compilado con él.

Desafortunadamente, readline es específico de Unix. Vea python tab completion in windows para una discusión de otras opciones en Windows.

+0

Entonces, en este caso, el desarrollador solo puede recomendar al usuario que compile su configuración de Python con soporte de lectura (además de implementar su propia versión de finalización de comando). – Dennis

Cuestiones relacionadas