IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Manipulation de la console et paramétrage en ligne de commande


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Manipulation de la console et paramétrage en ligne de commande
    Bonjour à tous,

    Je dois faire un programme utilisable en ligne de commande, qui va tourner sous Linux, qui va comporter différentes actions, différents arguments pour chaque action, qui va devoir faire appel à des outils installés sur la machine (wget par exemple), exécuter des commandes SQL etc.

    Cela pose différentes questions sur les outils à utiliser dont les thèmes sont :

    1) La configuration

    J'aimerais que ça s'utilise ainsi :

    ./leprogramme --action1 -p1 mon_paramètre_1 -p2 mon_paramètre_2
    ./leprogramme --action2 -p1 mon_paramètre_1 -p2 mon_paramètre_2 -p3 mon_paramètre_3

    Et si possible un fichier de configuration qui va définir les paramètres par défaut pour chaque action (ou alors un fichier de paramétrage pour chaque action)

    J'ai un peu regardé ce que proposait boost concernant cet aspect, ça m'avait l'air spécifique à un programme = une action. Je ne suis pas allé plus loin mais pensez-vous qu'il faille gérer ça "sois-même" ou que je puisse utiliser boost pour répondre à ces problématiques ?

    2) L'utilisation de la console

    Il faut que ça soit lisible et pas balancer 10.000 lignes de "statement" chaque seconde.

    Comment faire pour avoir une sortie sur une ligne qui fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [                                                                                                    ] 0%
    [..                                                                                                  ] 2%
    [....                                                                                                ] 4%
    [......                                                                                              ] 6%
    Mais sur une ligne qui se met à jour, plutôt que "consommer" une ligne dès que l'on a besoin d'indiquer une information (un avancement en l’occurrence) ?

    Autre question :

    Lorsque l'on appel un programme externe (exécuté par exemple via "system(wget http://www.ledomaine.com/data.zip)") pour transmettre la sortie et afficher une sortie de style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Telechargement de XXX - wget data.zip - 24% [========>                            ] 23,154,660  1.58MB/s  eta 42s
    Et que si le programme externe ne sort qu'une ligne qui se met à jour, ça n'affiche en sortie qu'une ligne qui se met à jour (et non pas X lignes par seconde) ?

    Je pense que pour le moment ça sera déjà pas mal pour désépaissir le brouillard

    Merci,

    A bientôt

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Je n'ai pas l'impression que c++ soit vraiment adapté (perso, les programmes qui en appel d'autres, je l'ai fait en bash).

    1 - C'est une utilisation classique de passage de paramètre en ligne de commande ? Boost.program_option permet de parser les paramètres en ligne de commande. De mémoire, il peut prendre d'autres sources d'entrées comme un fichier de conf. Il ne devrait pas y avoir de difficulté à combiner les 2.

    2 - Les classiques *curses (ncurses, pdcurses, etc).

    Sans sortir l’artillerie lourde, il est possible de le faire à la main en effaçant les caractères avec "\b".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <thread>
    #include <chrono>
    #include <iostream>
     
    int main() {
      using namespace std::literals::chrono_literals;
      std::cout << "[---       ] 30%";
      std::cout.flush();
      std::this_thread::sleep_for(1s);
      std::cout << "\b\b\b\b\b\b\b\b\b\b\b\b--     ] %50";
      std::cout.flush();
      std::this_thread::sleep_for(1s);
      std::cout << "\b\b\b\b\b\b\b\b\b\b--   ] %70";
    }
    boost/progress.hpp est sympa aussi.

    Concernant la dernière question: system, n'empêche pas cela. Si le programme ne met à jour qu'une ligne, seule cette ligne sera modifiée.

  3. #3
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Bonjour,

    1) une astuce utilisée notamment par git, est de définir un programme (script bash ?) chapeau qui, lorsqu'il est appelé de la sorte hat make-coffee arg1 arg2 arg3... se contente d'appeler le programme hat-make-coffee arg1 arg2 arg3.... Les différents programmes hat-make-cofee, hat-grow-tomatoes et hat-wash-dishes pourraient partager des bibliothèques communes. Ainsi, tu te retrouves bien avec un fichier de configuration par jeu de paramètres.

    2) jo_link_noir. ncurses ou 0x08 a/k/a \b .

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Merci pour vos réponses

    Je vais pouvoir avancer sans questions quant à la faisabilité par rapport à ça.

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Faire une appli console qui fonctionne en ligne de commande
    Par BasicZX81 dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/12/2013, 18h39
  2. Réponses: 2
    Dernier message: 27/03/2012, 12h23
  3. Comment lancer une appli Console vb.net en ligne de commande
    Par aiglelibre dans le forum Développement Windows
    Réponses: 2
    Dernier message: 08/10/2010, 15h29
  4. Console : écrire sur la ligne précédente
    Par Naoli dans le forum Général Python
    Réponses: 5
    Dernier message: 10/12/2008, 11h38
  5. paramétrage de ligne
    Par CélineM dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2007, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo