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 :

[Runtime] Lancement de commande UNIX - différents codes retour ?!


Sujet :

API standards et tierces Java

  1. #1
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Par défaut [Runtime] Lancement de commande UNIX - différents codes retour ?!
    Bonjour,

    je poste ici bien que ça relève surement plus d'un problème UNIX que d'une question Java, mais peut-être pourra-t-on me conseiller sur un moyen de contourner mon problème ?

    Voilà, je cherche tout simplement à lancer une commande UNIX à partir de java pour imprimer des documents.

    Mon code Java est donc tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String cmd = "lp -d " + printer_name + " " + pdf_file_print;
    //System.out.println("Executing: " + cmd);
    Process p = Runtime.getRuntime().exec(cmd);
    int i = p.waitFor();
    //System.out.println("Result: " + i);
    if (i != 0) {
    	// ERROR
    }
    Là le process doit retourner 0 quand la commande s'est executée avec succès, sinon un autre code d'erreur.

    Sauf que... sauf que certains de mes fichiers contiennent le caractère '&', donc cela génère des problèmes sous UNIX lors du lancement de la commande...

    Pour passer outre, j'ai tout simplement mis des "" pour échapper ce caractère dans les fichiers que j'imprime.
    Cela donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String cmd = "lp -d " + printer_name + " \"" + pdf_file_print + "\"";
    //System.out.println("Executing: " + cmd);
    Process p = Runtime.getRuntime().exec(cmd);
    int i = p.waitFor();
    //System.out.println("Result: " + i);
    if (i != 0) {
    	// ERROR
    }
    Le seul problème c'est qu'avec ce code, et bien le process me retourne désormais toujours 1 avec la fonctione waitFor(), et ce, que l'impression se soit bien déroulée ou non (par exemple si je spécifie un mauvais nom d'imprimante)...
    Donc je ne peux pas différencier si l'impression a été correcte ou non...

    Par contre si je lance directement la commande avec les guillemets d'échappement sous UNIX, le code retour est bien 0 lorsque ça marche ?!

    Avez-vous une idée de comment contourner/pourquoi apparaît ce problème ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et en utilisant des simple quotes à la place des doubles pour escaper le nom du fichier ça donne quoi?

  3. #3
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Par défaut
    J'ai testé cette idée... ça donne le même comportement

    J'ai aussi essayé de récupérer la valeur exitValue() du process à la place de celle retournée par waitFor() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int e = p.exitValue();
    //System.out.println("Exit value: " + e);
    ...mais celle-ci donne également 1...?

  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
    Salut,

    Utilise de préférences la méthode exec(String[]) qui permet de bien séparer les paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] cmd = { "lp",  "-d ", printer_name, pdf_file_print};
    Et encore une fois il faut traiter les flux d'entrée/sorties...




    a++

  5. #5
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Par défaut
    J'ai testé la méthode avec un tableau de String et cela donne strictement le même résultat.

    Par contre effectivement avec la redirection des flux (que j'ai affichés), j'obtiens la raison qui fait que la commande semble retourner 1 :

    UX:lp: WARNING: Cannot access the file:
    "/interfacelch/pdf_print/regular/200801/S&D-L0000002-200801.pdf".
    TO FIX: Make sure file names are valid.
    UX:lp: ERROR: No (or empty) input files.

    Problème ? Le fichier existe bel et bien...

    sun39:/lch/users/hdbqual3/lch/scripts> ls "/interfacelch/pdf_print/regular/200801/S&D-L0000002-200801.pdf"
    /interfacelch/pdf_print/regular/200801/S&D-L0000002-200801.pdf


  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 dois pas mettre les quotes dans le tableau.
    Le tableau ne doit contenir que ce que devra recevoir la commande (les quotes sont normalement géré par le shell)

    a++

  7. #7
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 9
    Par défaut
    Ca a l'air de marcher !

    request id is mab027-116 (1 file(s))
    Wait for: 0
    Exit value: 0


    Merci beaucoup

Discussions similaires

  1. [Runtime] Appel à une commande UNIX dans Java
    Par nina2007 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/07/2009, 13h27
  2. Réponses: 3
    Dernier message: 03/06/2008, 11h10
  3. CODE RETOUR GENERE PAR PL/SQL POUR SHELL UNIX
    Par mimi_été dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/11/2004, 08h32
  4. code retour UNIX sur erreur ORA
    Par vinz_07 dans le forum Administration
    Réponses: 7
    Dernier message: 25/08/2004, 11h04
  5. [commande DOS] Récupérer le code retour d'un programme
    Par bobunny dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 04/06/2004, 15h51

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