Pregunta

¿Cómo se pasan opciones a un ejecutable?¿Existe una manera más fácil que convertir las opciones en argumentos booleanos?

EDITAR:Las dos últimas respuestas han sugerido el uso de argumentos.Sé que puedo codificar una solución viable como esa, pero prefiero que sean opciones.

EDITAR2:Según las solicitudes de aclaración, usaré este ejemplo simple:Es bastante fácil manejar argumentos porque se analizan automáticamente en una matriz.

./printfile file.txt 1000

Si quiero saber cuál es el nombre del archivo que el usuario quiere imprimir, accedo a través de argv[1].

Ahora sobre cómo esta situación:

./printfile file.txt 1000 --nolinebreaks

El usuario quiere imprimir el archivo sin saltos de línea.Esto no es necesario para que el programa pueda ejecutarse (como lo son el nombre del archivo y el número de líneas a imprimir), pero el usuario tiene la opción de usarlo si lo desea.Ahora podría hacer esto usando:

./printfile file.txt 1000 true

El mensaje de uso informaría al usuario que el tercer argumento se utiliza para determinar si se imprime el archivo con saltos de línea o no.Sin embargo, esto parece bastante torpe.

¿Fue útil?

Solución

Parece pensar que existe una diferencia fundamental entre las "opciones" que comienzan con "--" y "argumentos" que no lo hacen.La única diferencia está en cómo los analizas.

Puede que valga la pena echarle un vistazo a GNU. getopt()/getopt_long() analizador de opciones.Admite pasar argumentos con opciones como --number-of-line-breaks 47.

Otros consejos

Los argumentos de la línea de comandos son el camino a seguir.Es posible que desee considerar el uso de Boost.ProgramOptions para simplificar esta tarea.

Utilizo dos métodos para pasar información:

1/ El uso de argumentos de línea de comando, que se hacen más fáciles de manejar con bibliotecas específicas como getargs.

2/ Como variables de entorno, usando getenv.

Pax tiene la idea correcta aquí.

Si necesita una comunicación bidireccional más completa, abra el proceso con canalizaciones y envíe cosas a stdin/listen en stdout.

También puede utilizar la función PostMessage() de Windows.Esto es muy útil si el ejecutable al que desea enviar las opciones ya se está ejecutando.Puedo publicar algún código de ejemplo si está interesado en esta técnica.

La pregunta no es muy clara en cuanto al contexto y lo que estás tratando de hacer: ¿te refieres a ejecutar un ejecutable desde un programa C++?Hay varias funciones de biblioteca C estándar con nombres como execl(), execv(), execve(), ...que toman las opciones como cadenas o punteros a una matriz de cadenas.También está system() que toma una cadena que contiene todo lo que estarías escribiendo en el indicador de bash, opciones y todo.

Me gusta la biblioteca popt.Es C, pero también funciona bien desde C++.

Sin embargo, no parece ser multiplataforma.Lo descubrí cuando tuve que piratear mi propia versión compatible con API para un puerto de Windows de algún software de Linux.

Puede poner opciones en un archivo .ini y usar el API GetPrivateProfileXXX para crear una clase que pueda leer el tipo de opciones de programa que estás buscando desde el .ini.

También puede crear un shell interactivo para que su aplicación cambie ciertas configuraciones en tiempo real.

EDITAR:A partir de sus ediciones, ¿no puede simplemente analizar cada opción en busca de palabras clave especiales asociadas con esa opción que sean "opcionales"?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top