¿Cuál es la interfaz recomendada para una utilidad que requiere muchos parámetros?

¿Cuál es la interfaz recomendada para una utilidad que requiere muchos parámetros?

Estoy creando una utilidad de línea de comandos que requiere seis datos de información para funcionar correctamente. Se parece a esto:

fm-git filename repository path comment username password

Sin embargo, en cualquier sistema individual, usernameserá passwordconstante.

Al ejecutar la utilidad, me resulta difícil compilarla. Por ejemplo, aquí hay una llamada de prueba a la utilidad (dividida en varias líneas para facilitar la lectura):

/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234

Estoy considerando diferentes formas de transmitir estos argumentos. Por ejemplo, fm-git -f filename -r repository ...o fm-git --filename filename --repository repository.... También estoy considerando realizar los ajustes de configuración de los argumentos usernamey password, ya que generalmente no cambiarán y luego podrían eliminarse de la llamada de la utilidad.

Cuando los argumentos de utilidad son muchos pero necesarios, ¿cuál es la práctica aceptada para mantener la legibilidad de las llamadas de utilidad?

Respuesta1

Normalmente, las aplicaciones Unix permiten múltiples formas de proporcionar esta información, y las formas más "específicas" anulan las menos específicas.

Así que tienes:

  • Para aplicaciones gráficas, el conjunto de herramientas utilizado casi siempre proporciona alguna forma de tener recursos (por ejemplo, xrdb-estilo en X simple, etc.)

  • un archivo de configuración, si el kit de herramientas aún no proporciona uno.

  • Opciones de línea de comando, tanto en formato corto como largo (fácil con getoptC)

  • valores predeterminados razonables si no se proporciona información, por ejemplo, el directorio actual para una ruta

Los parámetros posicionales solo tienen sentido para unos pocos obligatorios, seguidos posiblemente de una lista de archivos (porque las especificaciones comodín se expanden a múltiples parámetros). Seis piezas individuales son demasiadas; el orden es difícil de recordar, así que utilice opciones para estos.

Para las contraseñas, puede resultar útil proporcionar una manera de hacer que la aplicación lea la contraseña desde la entrada estándar, posiblemente mediante el uso de un valor especial (por ejemplo, --password -o -p -).

Quien utilice la aplicación puede elegir si las contraseñas codificadas, las contraseñas en los archivos de configuración o permitir que el usuario ingrese la contraseña es la mejor opción para el caso de uso particular.

Respuesta2

En general es una buena idea:

  1. calcule los argumentos dependientes pero permita redefinirlos: por ejemplo, en su ejemplo tiene filenamelo mismo que $(basename repository), por lo que es posible que solo necesite el repositorio, pero tiene la opción --filenamede proporcionar un nombre de archivo alternativo.
  2. ocultar la autenticación de la línea de comando y psla salida. Colóquelos en algún archivo: puede ser $HOME/.fm-git.conf, dé al archivo más restricciones como chmod 600 $HOME/.fm-git.confy léalos desde el archivo. A veces también es una opción obtener el nombre de usuario y la contraseña de las variables de entorno (como el nombre de usuario predeterminado es el nombre de usuario de su sistema o SUDO_USER), pero puede que no sea su caso.

Entonces, después de esas dos optimizaciones, solo tienes 3 parámetros cli, creo que es aceptable. Siéntase libre de usarlos como parámetro posicional o proporcionar algunas banderas como --comment: proporcionar banderas largas mejorará la legibilidad si usa su programa en scripts más, pero será necesario escribir más si ejecutará su programa principalmente manualmente desde cli.

De todos modos, mientras escribes tu programa en Python, te recomiendo que usesmódulo de análisis de argumentos-- le ayudará a analizar los parámetros y realizar cambios en el futuro si desea cambiarlos.

información relacionada