usage store_true parser mutually metavar help float exclusive argumentparser argument python argparse bash-completion

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:

  1. usa "completo" para unir una función completa a un comando
  2. 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:

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