store_true - python argparse argumentparser()
Python argparse y finalizaciĆ³n de bash (2)
Auto promoción sin https://github.com/kislyuk/argcomplete : https://github.com/kislyuk/argcomplete
argcomplete proporciona terminación de bash para argparse.
Me gustaría obtener autocompletado en mis scripts de Python también en los argumentos.
Nunca había entendido realmente cómo funcionaba el bash_completion (para los argumentos), pero después de excavar comprendí eso:
- usa "completo" para unir una función completa a un comando
- cada función de completar es básicamente una copia del argumento analizador
El segundo punto en particular no es genial, porque me gustaría que se genere automáticamente.
Lo mejor sería que el shell pregunta a mi programa en cada TAB qué hacer, pero tengo la impresión de que esto no puede funcionar, ¿es así?
La segunda opción probablemente sea simplemente escribir un convertidor desde un analizador argparse a una función de shell que se completa correctamente.
La "finalización" de Bash realmente es genial. Y fácil para programas escritos en Python ....
Creo que esto es justo lo que quiere: optcomplete: autogenerador de terminación de Shell para Python . Está disponible, por ejemplo, como el paquete "python-optcomplete" en Ubuntu.
Insertas unas pocas líneas en tu programa python, y el usuario (una vez) ejecuta el programa bash "completo" para decirle a bash cómo completar los argumentos:
complete -F _optcomplete <program>
y ahora el usuario tiene finalización! Por defecto, proporciona una finalización simple de las opciones del programa. Vea el ejemplo de cómo personalizar cómo funciona la finalización para una opción en particular. Está bellamente escrito y es fácil de extender para manejar subcomandos, opciones de finalización alternativas, etc.
Actualizar:
Para completar en zsh (para optparse y argparse), vea genzshcomp 0.3.1: Python Package Index
Como señaló @englebip, todavía necesitamos algo similar para el nuevo módulo argparse
, introducido en Python 2.7 y 3.2, ya que optparse
ahora está en desuso.
Aquí está la discusión sobre cómo avanzar en esa dirección:
- Archivo de la lista de correo: [issue14103] argparse: agregar la capacidad de crear una secuencia de comandos bash_completion
- Número 55 - argparse: agregue utilidades para autocompletar de shell para enganchar y soporte para extender información de finalización - Análisis de línea de comando de Python - Google Project Hosting
Vea también este trasfondo sobre cómo se hace: ¿cómo responde argparse (y la optparse obsoleta) a la tecla ''tab'' después del nombre del programa de Python, en bash? - Desbordamiento de pila