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

API standards et tierces Java Discussion :

[Unix] Recuperation variable d'environnement


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut [Unix] Recuperation variable d'environnement
    Bonjour tout le monde,

    je rencontre un probleme en ce moment pour recuperer une variable d'environnement sous unix.
    J'utilise Java 1.4.2, la methode System.getEnv() est donc depreciated. Pas de probleme, me dis-je (:p) je refait une fonction perso pour recuperer les variables que j'ai besoin...

    Voici donc le bout de code qui me le permet:
    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
    20
     public static void main(String[] args) throws IOException {
     
            String EnvValue=null;
            Process process = null;
            BufferedReader br = null;
     
            String CmdWin[] = {"cmd.exe", "/C", "echo %" + args[0] +"%"};
            String CmdUnix = "echo ${AOUTIL_CONFFILE}";
     
            if(OSType.equalsIgnoreCase("win")) process = Runtime.getRuntime().exec(CmdWin);
            else if(OSType.equalsIgnoreCase("unix")) process = Runtime.getRuntime().exec(CmdUnix);
     
            br = new BufferedReader( new InputStreamReader(process.getInputStream()));
            EnvValue = br.readLine();
     
            br.close();
            process.destroy();
     
            System.out.println(EnvValue);
        }
    Sous windows tout marche nickel, je recupere la valeur de ma variable d'environnement dans EnvValue. Sous unix, c'est une autre histoire. Lorsque je lance la commande dans mon shell je recupere la bonne valeur, mais lorsque que je lance mon programme java pour executer la meme commande par l'intermediaire d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("echo ${nom_variable});
    , j'obtien l'affichage suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sun26:/home/brunel/romain> java -jar test.jar
    ${AOUTIL_CONFFILE}
    sun26:/home/brunel/romain>
    en gros il m'affiche juste ce qui apparait apres le echo, c'est comme si il ne faisait pas le lien avec la variable d'environnement...

    des idées??

    merci d'avance

    Cordialement

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    As-tu testé ta commande directement en mode console sur ta machine pour vérifier qu'elle fonctionnait?

    Sais-tu quel shell est utilisé par la JVM au moment d'iexécuter une commande UNIX?
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut
    lorsque j'execute ma commande
    echo ${nom_variable}
    directement dans le shell tout marche bien, je recupere la bonne valeur.

    Par contre je ne sais pas quel shell est utilisé par la JVM. y-a-t-il une commande particulière pour le savoir?

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Bah... pour connaître le shell en cours d'utilisation, tu peux tenter un....... "echo $SHELL"

    Eventuellement, essaye sans les accolades: certains shells ne les apprécient justement pas. Donc si le shell utilisé par la JVM n'est pas celui que tu veux, le problème peut venir de là.

    Sinon, tu peux aussi forcer le shell en exécutant d'abord la commande "ksh", "bash", etc.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut
    mon shell est donc ksh.

    Lorsque j'execute dans mon shell la commande
    ksh -c 'echo $AOUTIL_CONFFILE'
    il me renvoit bien la valeur.

    par contre quand je l'execute par le biais de mon programme java j'obtient une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sun26:/home/brunel/romain> java -jar test.jar
    Exception in thread "main" java.io.IOException: ksh -c 'echo $AOUTIL_CONFFILE': not found
            at java.lang.UNIXProcess.forkAndExec(Native Method)
            at java.lang.UNIXProcess.<init>(UNIXProcess.java:52)
            at java.lang.Runtime.execInternal(Native Method)
            at java.lang.Runtime.exec(Runtime.java:566)
            at java.lang.Runtime.exec(Runtime.java:491)
            at java.lang.Runtime.exec(Runtime.java:457)
            at test.Main.main(Main.java:35)

    mouarf...

    [edit]: je me pose la question si ce n'est pas un probleme de syntaxe avec les guillemets, cote, etc...si quelqu'un est pro la dedans....

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je soupçonne effectivement que Runtime.exec() tente d'interprêter le texte entre les ' lui-même... Je ne suis pas un expert de la question, mais je te suggère d'essayer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taRuntime.exec("ksh -c \'echo $AOUTIL_CONFFILE\'");
    ou tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taRuntime.exec("echo $AOUTIL_CONFFILE"); // sans les {}
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par CyberChouan
    Je soupçonne que Runtime.exec() tente d'interprêter le texte entre les ' lui-même...

    Essaye donc avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taRuntime.exec("ksh -c \'echo $AOUTIL_CONFFILE\'");
    ou tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taRuntime.exec("echo $AOUTIL_CONFFILE"); // sans les {}
    En cas d'espaces dans les paramètres il faut impérativement utiliser la méthode Runtime.exec() qui attend un tableau (cf Les bonnes pratiques pour exécuter une application externe en Java, autre lien intéressant : Runtime.exec() n'est pas des plus simple...).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut
    Ca avance doucement.

    Maintenant lorsque j'execute cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    process = Runtime.getRuntime().exec("ksh -c echo \'$AOUTIL_CONFFILE\'");
    il me renvoit une ligne vide:
    sun26:/home/brunel/romain> java -jar test.jar

    sun26:/home/brunel/romain>
    lorsque je l'execute avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    process = Runtime.getRuntime().exec("echo $AOUTIL_CONFFILE");
    il me renvoit:
    sun26:/home/brunel/romain> java -jar test.jar
    $AOUTIL_CONFFILE
    bizarre bizarre...je vais aller voir sur les liens que vous m'avez donné pour me renseigner...

  9. #9
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut
    C'est bon!!!! j'ai trouvé la solution.
    donc pour que ca marche je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String CmdUnix[] = {"ksh","-c","echo $AOUTIL_CONFFILE"};
    process = Runtime.getRuntime().exec(CmdUnix);
    et il me renvoit bien la valeur de ma variable d'environnement.

    merci beaucoup !

    ++

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par titoun256
    J'utilise Java 1.4.2, la methode System.getEnv() est donc depreciated. Pas de probleme, me dis-je (:p) je refait une fonction perso pour recuperer les variables que j'ai besoin...
    Ou comment se casser la tete pour rien suite a une grosse bourde de Sun.
    Cette methode est UNIQUEMENT depreciee dans la 1.4 suite a une decision stupide qui a ete annulee dans la 1.5+ (ben oui cette methode n'est plus depreciee dans 1.5 et 1.6) !!!!!!!!!!!!!
    Tu peux donc l'utiliser sans aucun probleme !

    Voila, desole d'avoir gache votre trip sur les Process...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par bouye
    Ou comment se casser la tete pour rien suite a une grosse bourde de Sun.
    +1

    Où quand la volonté d'une portabilité maximum pose plus de problème qu'autre chose

    Citation Envoyé par bouye
    Cette methode est UNIQUEMENT depreciee dans la 1.4 suite a une decision stupide qui a ete annulee dans la 1.5+ (ben oui cette methode n'est plus depreciee dans 1.5 et 1.6) !!!!!!!!!!!!!
    Tu peux donc l'utiliser sans aucun probleme !
    Pas tout à fait : cette méthode est déprécié depuis Java 1.1 ou 1.2 je crois, mais comme toutes les méthodes déprécié elle continuait à fonctionner normalement...
    Par contre dans Java 1.4 elle a le défaut de se contenter de renvoyer une joli exception... Donc si les machines cibles utilisent du 1.4 tu es obligé de trouver une alternative

    a++

  12. #12
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Points : 41
    Points
    41
    Par défaut
    Oui effectivement comment se casser la tete...mais voila comme dit adiGuba, mes machines cibles tournent toutes sous Java 1.4.2 sans perspective d'evolution...


    en tout cas merci pour votre aide !

  13. #13
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Zut, effectivement, j'aurai du fouiller un peu plus avant d'intervenir
    Ahh effectivement, depreciee dans la 1.3.1 qui est la plus ancienne doc que je trouve chez eux. Ah donc le tolle a la sortie de la 1.4 concernait l'exception, pas le deprecated.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Recuperer variable d'environnement windows
    Par Elwe31 dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/01/2008, 19h32
  2. recuperer une variable d'environnement
    Par yann_p dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 26/04/2006, 10h00
  3. [Environnement][UNIX] Récupérer les variables environnement
    Par Jie.N dans le forum Général Java
    Réponses: 7
    Dernier message: 12/08/2005, 16h15
  4. [langage] Recupération variables d'environnement
    Par Ludo167 dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2004, 14h48
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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