Question

Comment passez-vous les options à un exécutable? Existe-t-il un moyen plus simple que de présenter les arguments booléens des options?

EDIT: Les deux dernières réponses ont suggéré d'utiliser des arguments. Je sais que je peux coder une solution viable comme ça, mais je préférerais qu’elles soient des options.

EDIT2: Pour les demandes de clarification, je vais utiliser cet exemple simple: Il est assez facile de gérer les arguments car ils sont automatiquement analysés dans un tableau.

./printfile file.txt 1000

Si je veux savoir le nom du fichier que l'utilisateur souhaite imprimer, j'y accède via argv [1].

Maintenant sur comment cette situation:

./printfile file.txt 1000 --nolinebreaks

L'utilisateur veut imprimer le fichier sans saut de ligne. Cela n’est pas nécessaire pour que le programme puisse s’exécuter (comme le sont le nom de fichier et le nombre de lignes à imprimer), mais l’utilisateur a la possibilité d’utiliser if s’il le souhaite. Maintenant, je pourrais le faire en utilisant:

./printfile file.txt 1000 true

L'invite d'utilisation informerait l'utilisateur que le troisième argument est utilisé pour déterminer s'il faut ou non imprimer le fichier avec des sauts de ligne. Cependant, cela semble plutôt maladroit.

Était-ce utile?

La solution

Vous semblez penser qu'il existe une différence fondamentale entre les "options" et les "options". qui commencent par " - " et " arguments " ça non. La seule différence réside dans la façon dont vous les analysez.

Cela vaut peut-être la peine de regarder l’analyseur d’option getopt () / getopt_long () de GNU. Il prend en charge le passage d’arguments avec des options telles que - nombre de lignes interrompues 47 .

Autres conseils

Les arguments en ligne de commande sont la voie à suivre. Vous pouvez envisager d’utiliser Boost.ProgramOptions pour simplifier cette tâche.

J'utilise deux méthodes pour transmettre des informations:

1 / Utilisation d'arguments de ligne de commande, plus faciles à manipuler avec des bibliothèques spécifiques telles que getargs.

2 / En tant que variables d'environnement, utilisez getenv.

Pax a la bonne idée ici.

Si vous avez besoin d'une communication bidirectionnelle plus approfondie, ouvrez le processus avec des tuyaux et envoyez des éléments à stdin / listen on stdout.

Vous pouvez également utiliser la fonction PostMessage () de Windows. C'est très pratique si l'exécutable auquel vous voulez envoyer les options est déjà en cours d'exécution. Je peux poster un exemple de code si cette technique vous intéresse.

La question n’est pas très claire en ce qui concerne le contexte et ce que vous essayez de faire: vous voulez dire exécuter un exécutable à partir d’un programme C ++? Il existe plusieurs fonctions de bibliothèque C standard avec des noms tels que execl (), execv (), execve (), ... qui prennent les options sous forme de chaînes ou de pointeur sur un tableau de chaînes. Il y a aussi system () qui prend une chaîne contenant tout ce que vous voudriez taper à l'invite bash, les options et tout.

J'aime la bibliothèque popt. C'est C, mais ça fonctionne très bien aussi avec C ++.

Cependant, cela ne semble pas être multi-plateforme. J'ai découvert cela lorsque j'ai dû pirater ma propre version compatible API pour un port Windows d'un logiciel Linux.

Vous pouvez insérer des options dans un fichier .ini et utiliser API GetPrivateProfileXXX pour créer une classe pouvant lire le type d’options que vous recherchez à partir du .ini.

Vous pouvez également créer un shell interactif pour que votre application modifie certains paramètres en temps réel.

EDIT: À partir de vos modifications, ne pouvez-vous pas simplement analyser chaque option à la recherche de mots clés spéciaux associés à cette option qui sont "facultatifs"?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top