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

Plateformes Discussion :

Ajouter une variable d'environnement durant l'exécution. [Linux]


Sujet :

Plateformes

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Ajouter une variable d'environnement durant l'exécution.
    Bonjour à tous.

    Je développe une application Qt sous Ubuntu 14.04. Et à un moment, je dois appeler un exécutable externe qui nécessite une variable d'environnement.
    Quand je le fait via le terminal, je fais d'abord un "export TSS_DATA=data" (ce qui est demandé dans la doc de l’exécutable), puis je l'exécute avec ./monExecutable.

    Maintenant je dois faire ça dans le code.
    J'ai une fonction toute faite qui me permet de passer une ligne de commande et de récupérer la sortie.
    Cependant l'appel à la commande "export" n'est (apparemment) pas pris en compte.
    J'ai aussi essayé de l'ajouter aux variables d'environnement en passant par ProcessEnvironment, mais rien n'y fait.

    Comment puis-je faire ?

    Merci.

    Nics33

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 451
    Points : 43 097
    Points
    43 097
    Par défaut
    Les variables d'environnement se fixent par export à partir du shell. Par contre elles ne seront valables que dans le shell actif et les shells enfants.

    Au niveau code, lors de la création du processus, celui-ci récupère les variables du processus père

    les variables d'environnement sont utilisables en C en utilisant int main(argc,argv,arge), elles sont ensuite accessible dans un tableau de la même façon que les paramètres argc.

    Tu peux ensuite en ajouter/modifier une via les fonctions putenv ou setenv de la stdlib
    quand tu lancera ton appli externe, celle-ci prendra les variables d'environnement de l'appelant, il te suffit donc de faire un setenv avant appel de celui-ci.

    export n'est pas une application mais une commande du shell.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense que la fonction d'appel d'un processus externe de Qt permet de définir les variables d'environnement à utiliser et je pense, cela sans setenv. Comment lancez-vous votre processus ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    chrtophe > Merci beaucoup pour toutes ces explications, je vais regarder ça dessuite.

    LittleWhite > Voici la fonction à laquelle je passe une commande en paramètre et qui me permet de récupérer la sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
        QString MaClasse ::  execute(char* cmd) {
        FILE* pipe = popen(cmd, "r");
        if (!pipe) return "ERROR";
        char buffer[128];
        std::string result = "";
        while(!feof(pipe)) {
            if(fgets(buffer, 128, pipe) != NULL)
                result += buffer;
        }
        pclose(pipe);
        return QString(result.c_str());
    }

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Comme je l'ai dit, il y a des fonctions dans Qt pour faire la même chose : QProcess.
    Si vous voulez continuer à rester bas niveau, il y a des trucs comme fork, suivi de execvpe qui prend bien les variables d'environnement en argument.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Comme je ne tiens pas particulièrement à rester bas niveau, j'ai utilisé les QProcess et ça fonctionne très bien !!!
    Je met le lien de la FAQ qui m'a également aidée : http://qt.developpez.com/doc/4.7/qprocess/

    Ce qui donne au final :
    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
    16
    17
    18
    19
     
     
        QProcess process;
        QStringList env = QProcess::systemEnvironment();
        env << "TSS_DATA=data";
        process.setEnvironment(env);
        process.start("./monExecutable", QStringList() << "nomFichierIn" << "nomFichierOut");
     
     
        if (!process.waitForStarted()){
            qDebug() << "WAIT Start ";
        }
        if (!process.waitForFinished()){
            qDebug() << "WAIT Finished";
        }
     
     
        QByteArray result = process.readAll();
        qDebug() << QString (result);
    Merci à tout les deux.

    NB : En fait juste une dernière question : Comment récupérer ce qui sort dans le fichierOut avec la fonction QProcess::realAll() plutôt que dans un fichier ?
    (équivalent à ce qui est fait dans un terminal avec $(tty) )

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 451
    Points : 43 097
    Points
    43 097
    Par défaut
    C'est vrai que j'aurais du penser à QProcess, mais ne l'utilisant pas, j'ai pas le reflexe et ne savais pas que c'était possible ( bien que logique que ça fonctionne )
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Ajouter une variable d'environnement au classpath
    Par greenzephyr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 29/09/2010, 14h16
  2. comment ajouter une variable en environnement
    Par achta dans le forum Débuter
    Réponses: 3
    Dernier message: 03/08/2009, 15h56
  3. Réponses: 0
    Dernier message: 22/07/2009, 19h34
  4. [Batch] Ajouter une variable d'environnement
    Par sliderman dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 22/05/2009, 11h43
  5. Ajouter une variable d'environnement
    Par julien.63 dans le forum Développement OS X
    Réponses: 4
    Dernier message: 14/06/2007, 00h34

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