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

Servlets/JSP Java Discussion :

[Servlet][Windows][System call]Runtime.exec


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut [RESOLU][Servlet][Windows][System call]Runtime.exec
    Hello,

    je fais une petite appli JSP/Servlet qui doit appeler des scripts Perl pour la generation de rapport.
    Pour appeler ces scripts sous windows je cree une commande que je donne a runtime.exec.
    Le script est bien appele, il cree un fichier powerpoint, mais le probleme c'est qu'on dirait qu'il ne s'arrete jamais.
    Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Process p = Runtime.getRuntime().exec(ma_commande);
    p.waitFor();
    System.out.println("Tu arretes bordel !!!!!")
    et la derniere instruction n'est jamais atteinte !!!!
    Est ce que quelqu'un a une idee ?
    J'ai lu sur le forum qu'on peut utiliser un timeout mais le probleme c'est que la generation de mes fichiers peut prendre un temps non definie donc je ne pense pas que ce soit la bonne methode.

    Merci,

    Lucho

    Modéré par adiGuba : balise [ code ] ajouté

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Pourquoi tu l'attends ??? Tu n'as qu'à le lancer (Runtime.getRuntime().exec(...)) et lister (par exemple) le contenu du dossier dans lequel le document est censé être créé.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Hello,

    non, j'ai besoin d'attendre que la generation du fichier soit termine car juste apres cette action je doit le recuperer et l'envoyer au browser. Il faut que je sois sur que tout c'est bien passe parce que le probleme c'est que le temps necessaire a la creation n'est pas fixe.

    Thanks,

    Lucho

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    J'y pensais justement. Tu ne peux pas vérifier la taille de ton fichier et considérer qu'il est prêt quand elle ne bouge plus ? Ou la date de modif.

    Je vais jeter un oeil sur ton problème.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Hello nuke_y,

    merci c'est cool !!!

    Non, en fait je ne peux pas faire de check sur ces elements (date de modif, size, ...) parce que c'est pas fixe.

    En fait je viens de trouver des indications, notamment par rapport a Input Stream qui serait "plein" et qui pourrait causer ce probleme. Je suis en train de voir si je peux ajouter ca, je te tiens au courant,

    Merci,

    Lucho

  6. #6
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    La taille tu regardes si elle change, pas si elle a atteint une valeur fixe. un peu comme une dérivée quoi.

    Enfin on s'en fout, ça c'est une feinte, faut régler le problème autrement. Je viens de vérifier et il me semblait bien que je n'utilisais jamais waitFor(). Un article qui peut t'aider http://www.javaworld.com/javaworld/j...229-traps.html

  7. #7
    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
    Citation Envoyé par lucho31
    En fait je viens de trouver des indications, notamment par rapport a Input Stream qui serait "plein" et qui pourrait causer ce probleme.
    En effet, il faut fermer les flux avant d'effectuer le waitFor(), sinon le processus lancé attendra que les flux soient lut pour se tuer, et ton programme attendra que le processus soit mort pour continuer --> blocage !

    a++

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Merci,

    je suis en train de mettre en place cette solution,
    juste une question, a priori il faut vider les flux InputStream et ErrorStream du Process, pourquoi pas le OutputStream ? (question conne certainement )

    Thanks guys,

    Lucho

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 21
    Points
    21
    Par défaut
    Ok,

    bon ben ca m'a l'air de bien marche grace a l'article de javaworld.

    Merci a tous les 2,

    Lucho

+ 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. deux commandes sous windows dans runtime.exec()
    Par PhilippeDDD dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2009, 08h39
  3. [Runtime][exec]Récupérer les stdout ET stderr
    Par yveslamand dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 20/05/2005, 13h37
  4. [Runtime]exec() avec une commande paramétrée
    Par nice dans le forum Général Java
    Réponses: 9
    Dernier message: 12/05/2005, 13h15
  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