Usa el readline
de Python ataduras Por ejemplo,
import readline
def completer(text, state):
options = [i for i in commands if i.startswith(text)]
if state < len(options):
return options[state]
else:
return None
readline.parse_and_bind("tab: complete")
readline.set_completer(completer)
Los documentos oficiales del módulo no son mucho más detallados, consulte los documentos de línea de lectura para obtener más información.
Siga la documentación de cmd y estará bien
import cmd
addresses = [
'[email protected]',
'[email protected]',
'[email protected]',
]
class MyCmd(cmd.Cmd):
def do_send(self, line):
pass
def complete_send(self, text, line, start_index, end_index):
if text:
return [
address for address in addresses
if address.startswith(text)
]
else:
return addresses
if __name__ == '__main__':
my_cmd = MyCmd()
my_cmd.cmdloop()
Salida para pestaña -> pestaña -> enviar -> pestaña -> pestaña -> f -> pestaña
(Cmd)
help send
(Cmd) send
[email protected] [email protected] [email protected]
(Cmd) send [email protected]
(Cmd)
Como dice "NO intérprete" en su pregunta, supongo que no quiere respuestas que involucren la línea de lectura de python y cosas por el estilo. (editar :en retrospectiva, obviamente ese no es el caso. Ho hum. Creo que esta información es interesante de todos modos, así que la dejaré aquí. )
Creo que podrías estar buscando esto.
Se trata de agregar finalización a nivel de shell a comandos arbitrarios, extendiendo la finalización de tabulación propia de bash.
En pocas palabras, creará un archivo que contiene una función de shell que generará posibles finalizaciones, guárdelo en /etc/bash_completion.d/
y regístralo con el comando complete
. Aquí hay un fragmento de la página vinculada:
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--help --verbose --version"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _foo foo
En este caso, escribir foo --[TAB]
le dará los valores en la variable opts
, es decir, --help
, --verbose
y --version
. Para sus propósitos, esencialmente querrá personalizar los valores que se colocan en opts
.
Eche un vistazo al ejemplo en la página vinculada, todo es bastante sencillo.