La mayoría de las aplicaciones que los desarrolladores escriben deben parametrizarse externamente al inicio. Pasamos rutas de archivos, nombres de tuberías, direcciones TCP/IP, etc. Hasta ahora he estado usando la línea de comandos para pasarlas a la aplicación que se está lanzando. Tuve que analizar la línea de comandos en main
y dirigir los argumentos a donde se necesitan, que es por supuesto un buen diseño , pero es difícil de mantener para una gran cantidad de argumentos. Recientemente decidí usar el mecanismo de variables de entorno. Son globales y accesibles desde cualquier lugar, que es menos elegante desde el punto de vista arquitectónico, pero limita la cantidad de código.Estrategia de aprobación de argumentos: variables de entorno frente a la línea de comandos
Estas son mis primeras impresiones (y posiblemente bastante superficiales) en ambas estrategias, pero me gustaría escuchar opiniones de desarrolladores más experimentados: ¿Cuáles son los altibajos del uso de variables de entorno y argumentos de línea de comando para pasar argumentos? a un proceso? que me gustaría tener en cuenta las siguientes cuestiones:
- calidad de diseño (flexibilidad/capacidad de mantenimiento),
- restricciones de memoria,
- solución de portabilidad.
Observaciones:
anuncio. 1. Este es el aspecto principal en el que estoy interesado.
Ad. 2. Esto es un poco pragmático. Conozco algunas limitaciones en Windows que actualmente son huge (más de 32kB tanto para la línea de comando como para el bloque de entorno). Supongo que esto no es un problema, ya que solo debes usar un archivo para pasar toneladas de argumentos si lo necesitas.
Ad. 3. No sé casi nada de Unix, así que no estoy seguro de si ambas estrategias son tan utilizables como en Windows. Elabore esto si lo desea.
¿Podría dar más detalles, como en el número real de parámetros? y si hay agrupaciones para ellos o son todos al azar? y para que idioma es esto? java, C++, etc ...La razón por la que estoy pidiendo ese nivel de detalle es que, si bien podría tratarse de un problema en cualquier idioma, puede haber una solución específica para la implementación del idioma de la que no tenga conocimiento. –
Para mencionar los sistemas operativos * nix, no tienen nada que ver con "variable de entorno global" y cada env var se hereda del proceso principal al proceso hijo en el horario de fork. Entonces, "global" no es un pro para env var sobre la línea de comando, al menos para esos sistemas operativos. – shr
Hola, @jamesDrinkard. Estoy interesado en un enfoque general. Si quisiera pasar 20 argumentos diferentes de cadena etiquetada/integral/número real de un script de Python ejecutado por un intérprete de 32 bits a una aplicación de 64 bits escrita en C++, ¿qué método usaría? –