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

Langage Java Discussion :

Runtime.exec & double quote


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Par défaut Runtime.exec & double quote
    Bonjour,

    Voici un petit souci que je rencontre:

    Je souhaite lancer un programme via java avec en argument le nom d'un autre programme, qui contient donc potentiellement des espaces.
    Je dois donc pour cela échapper le nom.

    Or ça ne marche jamais.

    Après quelques recherches, je suis donc tombé sur ce rapport de bug (6468220): http://bugs.sun.com/view_bug.do?bug_id=6468220

    On peut apercevoir dans ce rapport un FIX. Sauf que je ne sais pas l'implémenter, pourriez vous m'aider?

    Je ne souhaite pas directement toucher à la machine virtuelle, juste surcharger les bonnes classes.

    Les classes qui doivent être modifiées sont ProcessImpl.java et Runtime.java, dans java.lang.

    Je m'étais dit que je pouvais recréer ces classes à ma sauce,mais elles requièrent des classes privées, uniquement accessibles dans java.lang.

    Bref, quelqu'un aurait-il plus de visibilité que moi sur ce problème?
    Qqun pourrait me venir en aide?

    Merci d'avance pour toute aide!

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu voudrais exécuter quelle commande ?
    Quel est ton code ?

    a++

  3. #3
    Membre éprouvé Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Par défaut
    J'ai plus le code sous les yeux, mais c'est un Runtime.exec avec un tableau de string pour les arguments.

    Or un de ces arguments contient un nom de programme, avec des espaces.

    Genre l'argument en question: "-exe=Programme 3.0.exe" -> passe pas
    "-exe=Programme_3.0.exe" -> passe


    Et c'est précisément ça qui est embêtant. La solution provisoire que j'ai trouvé c'est de renommer provisoirement le programme, afin de passer du coup un nom sans espace, et après l'exécution de le renommer à nouveau comme initialement.

    Mais bon, d'une je trouve ça archi-moche, et de deux j'ai de temps à autre des erreurs dans mon programme qui me stressent (je ne sais pas si ça vient de là où de plus loin, pour la simple et bonne raison que je n'ai pas déterminé la reproductibilité du bug).

    Donc du coup je suis tombé sur ce rapport de bug de sun qui me semble correspondre, mais j'ai du mal à appliquer le fix.

    PS: Et le pourquoi de la chose: j'ai un exe à auto-patcher. J'ai donc un second programme que je lance, le premier se ferme, le second patche le 1er et le relance.

    PS2: je précise que j'ai essayé pas mal de combinaisons à coups de
    "-exe=\"Programme 3.0.exe\"", "\"-exe=Programme 3.0.exe\"", ...
    Rien ne marche, mais si j'en crois le rapport de soumission de bug, ce souci est connu.

    PS3: Et je n'ai pas accès au code du second programme, donc je ne peux pas passer la chose avec de multiples arguments.

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yaraco Voir le message
    Donc du coup je suis tombé sur ce rapport de bug de sun qui me semble correspondre, mais j'ai du mal à appliquer le fix.
    Ça n'a rien à voir : le bug concerne les double-quotes et non pas les espaces...

    Citation Envoyé par yaraco Voir le message
    PS2: je précise que j'ai essayé pas mal de combinaisons à coups de
    "-exe=\"Programme 3.0.exe\"", "\"-exe=Programme 3.0.exe\"", ...
    Rien ne marche, mais si j'en crois le rapport de soumission de bug, ce souci est connu.
    Il ne faut pas essayer toutes les combinaisons... Il faut passer les arguments séparément via exec(String[]) (ou ProcessBuilder).

    Le commande suivante :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    programme arg1 "arg 2"
    S'écrit de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p = Runtime.exec("programme", "arg1", "arg 2");
    Maintenant sans avoir la ligne de commande originelle difficile de t'aider plus...

    a++

  5. #5
    Membre éprouvé Avatar de yaraco
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 89
    Par défaut
    Si, je m'exprime effectivement mal, mais ça a à voir. Je veux les doubles-quotes parce qu'il y a des espaces dans mon argument et si je ne les met pas, il sera plus tard mal interprété du fait de ces espaces.

    Je reposterai demain le code quand j'y aurai accès, mais j'utilise la syntaxe que tu as posté:
    Process p = Runtime.exec("programme", "arg1", "arg 2");
    Il y aura juste un argument avec des espaces dedans, mettons arg2 sera remplacé par: -prp="nom de programme avec espace". qui sera mal interprété.

    Et cela est du au fait si j'ai bien compris que les doubles quotes ne sont pas correctement passées dans les arguments.

    Je complète ce post demain, bonne soirée!

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Tu ne devrais pas avoir besoin des quotes puisques tu sépares déjà les arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p = Runtime.exec("programme", "arg1", "-prp=nom de programme avec espace");
    Sauf erreur en ligne de commande les quotes sont traitées et supprimées par le shell

    a++

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

Discussions similaires

  1. [RUNTIME][EXEC]
    Par adrien1977 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/09/2009, 16h28
  2. Réponses: 15
    Dernier message: 21/02/2007, 17h29
  3. [Servlet][Windows][System call]Runtime.exec
    Par lucho31 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 18/01/2005, 11h55
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  5. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54

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