Soy consciente de cómo configurar el autocompletado de objetos de Python en el intérprete de Python (en Unix).
- Google muestra muchos resultados para obtener explicaciones sobre cómo hacer esto.
- Desafortunadamente, hay tantas referencias que es difícil encontrar lo que necesito hacer, que es un poco diferente.
Necesito saber cómo habilitar, tabulación / finalización automática de elementos arbitrarios en un programa de línea de comandos escrito en Python.
Mi caso de uso específico es un programa de Python de línea de comandos que necesita enviar correos electrónicos. Quiero poder autocompletar direcciones de correo electrónico (tengo las direcciones en el disco) cuando el usuario escribe parte de ellas (y, opcionalmente, presiona la tecla TAB).
No lo necesito para funcionar en Windows o Mac, solo Linux.
python
linux
unix
command-line
autocomplete
Paul D. Eden
fuente
fuente
Respuestas:
Usa los
readline
enlaces de Python . Por ejemplo,Los documentos oficiales del módulo no son mucho más detallados, consulte los documentos de readline para obtener más información.
fuente
Siga la documentación de cmd y estará bien
Salida para pestaña -> pestaña -> enviar -> pestaña -> pestaña -> f -> pestaña
fuente
Dado que dice "NO intérprete" en su pregunta, supongo que no quiere respuestas que involucren python readline 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 después de 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, lo guardará
/etc/bash_completion.d/
y lo registrará con el comandocomplete
. Aquí hay un fragmento de la página vinculada:En este caso, la escritura
foo --[TAB]
le dará los valores de la variableopts
, es decir--help
,--verbose
y--version
. Para sus propósitos, esencialmente querrá personalizar los valores que se colocan enopts
.Eche un vistazo al ejemplo en la página vinculada, todo es bastante sencillo.
fuente
Me sorprende que nadie haya mencionado argcomplete, aquí hay un ejemplo de los documentos:
fuente
Aquí hay una versión completa del código que fue muy proporcionada por ephemient here (gracias).
fuente
fuente
readline.parse_and_bind('tab:complete')
conreadline.parse_and_bind ("bind ^I rl_complete")
Puede intentar usar Python Prompt Toolkit , una biblioteca para crear aplicaciones interactivas de línea de comandos en Python.
La biblioteca facilita la adición de la funcionalidad interactiva de autocompletar, lo que permite al usuario usar la Tabclave para recorrer visualmente las opciones disponibles. La biblioteca es multiplataforma (Linux, OS X, FreeBSD, OpenBSD, Windows). Ejemplo:
(Fuente de la imagen: pcgli )
fuente
Las respuestas publicadas funcionan bien, pero he abierto una biblioteca de autocompletar que escribí en el trabajo. Lo hemos estado usando durante un tiempo en producción y es rápido, estable y fácil de usar. Incluso tiene un modo de demostración para que pueda probar rápidamente lo que obtendría mientras escribe palabras.
Para instalarlo, simplemente ejecute:
pip install fast-autocomplete
Aquí hay un ejemplo:
Pago: https://github.com/wearefair/fast-autocomplete para el código fuente.
Y aquí hay una explicación de cómo funciona: http://zepworks.com/posts/you-autocomplete-me/
Se trata de errores ortográficos y, opcionalmente, de ordenar por el peso de la palabra. (digamos que
burrito
es más importante quebook
, entonces le daburrito
un "recuento" más alto y aparecerá primero antesbook
en los resultados.Words es un diccionario y cada palabra puede tener un contexto. Por ejemplo, el "recuento", cómo mostrar la palabra, algún otro contexto alrededor de la palabra, etc. En este ejemplo, las palabras no tenían ningún contexto.
fuente