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 :

[Process] Gestion des flux


Sujet :

API standards et tierces Java

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut [Process] Gestion des flux
    Note de modération : discussion découpé depuis le sujet suivant : Comment connaître l'ID de mon processus Java ?

    Citation Envoyé par adiGuba
    Pourquoi rediriger vers un fichier ? Lorsque tu lances une commande système tu récupères les flux stdout et stderr directement dans ton application Java (voir la classe Process).

    a++
    bonjour

    Je trouve ton affirmation intéressante pour moi, et j'aurais besoin de récuperer les flux stdout et stderr directement dans mon application mais je ne sais pas comment.

    voici les instructions java pour lancer mon script shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String[] cmd = new String[4];
    cmd[0] = "/bin/csh";
    cmd[1] = "/usr/apache-tomcat-5.5.17/toto.csh ";
    cmd[2] = "argument_1";
    cmd[3] = "| tee fichier.log";
     
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Est-ce que tu as au moins essayer de regarder les méthodes de la classe Process ????

    Tu aurais vu les méthodes getErrorStream(), getInputStream() et getOutputStream().

    Vous pouvez tout de même chercher un miinimum par vous-même. Surtout qu'adiguba t'avait même donné le lien vers la classe en question...

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par wichtounet
    Est-ce que tu as au moins essayer de regarder les méthodes de la classe Process ????

    Tu aurais vu les méthodes getErrorStream(), getInputStream() et getOutputStream().

    Vous pouvez tout de même chercher un miinimum par vous-même. Surtout qu'adiguba t'avait même donné le lien vers la classe en question...
    oui je fais partout des recherches et je n'arrive pas. as tu un exemple en java ?

    Qu'est ce que la méthode waitfor fait au juste ?

  4. #4
    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,


    Runtime permet de lancer un programme et non pas une ligne de commande !!!!

    Un peu de lecture : Runtime.exec() n'est pas des plus simple... (a noter la présence d'une API facilitant l'appel de ligne de commande système).

    a++

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Runtime permet de lancer un programme et non pas une ligne de commande !!!!

    Un peu de lecture : Runtime.exec() n'est pas des plus simple... (a noter la présence d'une API facilitant l'appel de ligne de commande système).

    a++
    et est-ce que un script shell est considéré comme quoi ?

    j'ai déjà lu le lien ci-dessous, et je suis en train de le relire.

    apparament mon File System est plein. comment je dois faire pour vérifier ceci et le vider ?

    si mon script n'est pas considéré comme un programme, qu'est ce que je dois alors utiliser comme commande pour le lancer à partir de l'application java ?

    mais j'ai un autre petit script que j'ai pu lancer en utilisant Runtime.exec. mais maintenant lui aussi il ne marche plus. hier il marchait, mais plus maintenant. je ne comprends plus rien. il me semble qu'il faut gérer les process et le stderr

  6. #6
    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 diamonds
    et est-ce que un script shell est considéré comme quoi ?
    Un programme.
    Mais la manière dont tu le lance (avec un pipe pour rediriger son flux) correspond à une ligne de commande. Or cela ne sera pas interprété (le | sera passé en paramètre à ton script.

    Citation Envoyé par diamonds
    apparament mon File System est plein. comment je dois faire pour vérifier ceci et le vider ?
    Il faut soit le lire, soit le fermer (si tu ne veux pas récupérer la sortie).

    Citation Envoyé par diamonds
    mais j'ai un autre petit script que j'ai pu lancer en utilisant Runtime.exec. mais maintenant lui aussi il ne marche plus. hier il marchait, mais plus maintenant. je ne comprends plus rien. il me semble qu'il faut gérer les process et le stderr
    Est-ce que tu traites les flux d'entrée/sorties ? Si oui comment ? Et pourrait-on voir ton code ?


    a++

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    1- un script shell est considéré comme... un fichier ! ( à la base tout est fichier sous unix ). S'il est exécutable ( attribut "x" ) alors, tu peux le lancer.
    2- AdiGuba -> si un filesystem est plein, la seule méthode de le vider est de supprimer les fichiers ou répertoire s'y trouvant. non ?
    3- la gestion des flux ( entrée, sortie et erreur ) se fait dans des Threads séparés, encore faut-il que tu maitrise ça.

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    [quote=adiGuba]Un programme.
    Mais la manière dont tu le lance (avec un pipe pour rediriger son flux) correspond à une ligne de commande. Or cela ne sera pas interprété (le | sera passé en paramètre à ton script.

    Citation Envoyé par adiGuba
    Est-ce que tu traites les flux d'entrée/sorties ? Si oui comment ? Et pourrait-on voir ton code ?
    a++
    non je ne traite pas encore les flux d'entrée/sortie.

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String chemin = "/usr/local/apa..-5.5.17/rep1/rep2/rep3/rep4/toto.csh";
    String[] cmdarray1 = {"/bin/csh", chemin, argument1, argument2, argument3, argument4, argument5, argument6, argument7, argument8, argument9, argument10, argument11, argument12, argument13};
    try {
      Process process = Runtime.getRuntime().exec(cmdarray);
     
    } catch (IOException ex) 
                        {
                            ex.printStackTrace();
                        }
    c'est tout. il n'y a pas de flux de consommation. parce que je n'avais pas besoin de la sortie, mais puisque le script shelle ne s'exécutait pas complétement, j'ai pensé à enregistrer la sortie de l'exécution du script shell. y a -til une commande qu'on peut rajouter avec les arguments du script ou même dans le script lui même pour enregistrer ses comportements lorsqu'il est lançé à partir de l'application java ? car le même script lançé à partir du prompt de unix fonctionne bien (j'ai un unix solaris en passant)

    pour le moment , oui je veux récupérer ces sorties pour voir ce qui se passe, mais lorsque tout devient bien, je n'aurais plus besoin de récupérer cette sortie du script.

    Citation Envoyé par adiGuba
    Il faut soit le lire, soit le fermer (si tu ne veux pas récupérer la sortie).
    comment fais ton pour le fermer plus tard ?

    comment ça se fait que une petite application qui lancait un script marchait bien hier, mais ce matin tout est bloqué ? faut-il vider quelques choses ?

    quelles sont les permission requises sur chaque répertoire qui constitue le chemin : "/usr/local/apa..-5.5.17/rep1/rep2/rep3/rep4/toto.csh";

    Merci pour ton aide.

  9. #9
    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 iohack
    2- AdiGuba -> si un filesystem est plein, la seule méthode de le vider est de supprimer les fichiers ou répertoire s'y trouvant. non ?
    Heu oui... J'ai lu trop vite je croyais qu'il parlait du flux système entre le process et l'appli Java...

    Citation Envoyé par iohack
    3- la gestion des flux ( entrée, sortie et erreur ) se fait dans des Threads séparés, encore faut-il que tu maitrise ça.
    Ou alors il suffit d'utiliser mon API décrite sur la page précédemment cité


    Citation Envoyé par diamonds
    c'est tout. il n'y a pas de flux de consommation. parce que je n'avais pas besoin de la sortie, mais puisque le script shelle ne s'exécutait pas complétement, j'ai pensé à enregistrer la sortie de l'exécution du script shell.
    Comme je l'indique sur le blog, si tu ne traites pas les flux d'entrées/sorties le process peut se bloquer...

    Si tu n'a pas vraiment besoin de les lire tu peux les fermer :
    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
    		try {
    			Process process = Runtime.getRuntime().exec(cmdarray);
    			// Fermeture des flux :
    			process.getOutputStream().close();
    			process.getInputStream().close();
    			process.getErrorStream().close();
     
    			// Attente de la fin du process :
    			process.waitFor();
     
    		} catch (IOException ex) {
    			ex.printStackTrace();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    Mais du coup tu perdras tout ce que le script pourra écrire dans la console...

    a++

    PS : tu ne lances pas un script, mais un interpréteur (csh) qui exécutera le script...

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par adiGuba
    Heu oui... J'ai lu trop vite je croyais qu'il parlait du flux système entre le process et l'appli Java...


    Ou alors il suffit d'utiliser mon API décrite sur la page précédemment cité
    est ce que tu parle de cette page : Runtime.exec() n'est pas des plus simple...

    Citation Envoyé par adiGuba
    Comme je l'indique sur le blog, si tu ne traites pas les flux d'entrées/sorties le process peut se bloquer...
    alors comment le débloquer maintenant, puisque il est déjà bloquer ?
    Citation Envoyé par adiGuba
    Si tu n'a pas vraiment besoin de les lire tu peux les fermer :
    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
            try {
                Process process = Runtime.getRuntime().exec(cmdarray);
                // Fermeture des flux :
                process.getOutputStream().close();
                process.getInputStream().close();
                process.getErrorStream().close();
     
                // Attente de la fin du process :
                process.waitFor();
     
            } catch (IOException ex) {
                ex.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    Mais du coup tu perdras tout ce que le script pourra écrire dans la console...
    ok je vais les fermer mais juste lorsque mon application marche bien.
    maintenant je veux les lire pour comprendre ce que le script pourra écrire ans la console. as tu un code déjà fait qui répond à mon cas. si non je vais m'ennuyer terriblement pour une chose que je ne vais plus utiliser dans le futur avec java.


    Citation Envoyé par adiGuba
    PS : tu ne lances pas un script, mais un interpréteur (csh) qui exécutera le script...
    mais tu comprends ce que je veux faire, mon objectif est de lancer le script , alors dois-je toujours garder l'option /bin/csh ? ou bien je peux l'enlever.

    aussi mon script recoit 13 argument en entrée, et j'ai lu quelques part que la commande exec n'accepte pas beaucoup d'argument. qu'est ce que t'en pense ?

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    je viens de rajouter le code qui traite les input et les erreurs, que voici : mais il me donne une erreur au niveau des deux lignes rouges
    le message d'erreur dit que :
    local variable process is accessed from within inner class; needs to be declared 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    String chemin = "/usr/local/apache-tomcat-5.5.17/toto.csh";
    String[] cmdarray = {"/bin/csh",chemin, argument1, .....};
     
    try {
     
       Process process = Runtime.getRuntime().exec(cmdarray);
     
                       } catch (IOException ex) {
                           ex.printStackTrace();
                   } catch (InterruptedException e) {
                          e.printStackTrace();
                       }
     
    // Consommation de la sortie standard de l'application externe dans un Thread separe
    new Thread() {
     public void run() {
      try {
       BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
     String line = "";
       try {
        while((line = reader.readLine()) != null) {
         // Traitement du flux de sortie de l'application si besoin est
                                        textArea1.setText(line);
      }
       } finally {
        reader.close();
       }
      } catch(IOException ioe) {
       ioe.printStackTrace();
      }
     }
    }.start();
    // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
    new Thread() {
     public void run() {
      try {
       BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
     String line = "";
       try {
        while((line = reader.readLine()) != null) {
         // Traitement du flux d'erreur de l'application si besoin est
                                        textArea2.setText(line);
      }
       } finally {
        reader.close();
       }
      } catch(IOException ioe) {
       ioe.printStackTrace();
      }
     }
    }.start();
    est-ce que j'écris bien la sortie dans les deux textArea1 et textAre2 ?

    si je rajoute la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final Process process = Runtime.getRuntime().exec(cmdarray);
    avant les deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     BufferedReader reader = new ......
    l'erreur disparait mais je ne pense pas que c'est la meilleure solution étant donné que ma commande cmdarray s'exécute 3 fois.

    dans ce cas le textArea2 affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stty: : Invalid argument
    c'est l'erreur que le script produit lorsque il est lancé de l'application java.

  12. #12
    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 diamonds
    est ce que tu parle de cette page : Runtime.exec() n'est pas des plus simple...
    Oui... en même temps c'est la seule que j'ai donné donc...



    Citation Envoyé par diamonds
    as tu un code déjà fait qui répond à mon cas. si non je vais m'ennuyer terriblement pour une chose que je ne vais plus utiliser dans le futur avec java.
    C'est justement ce que fait mon API (tu as bien lu l'article ???)




    Citation Envoyé par diamonds
    mais tu comprends ce que je veux faire, mon objectif est de lancer le script , alors dois-je toujours garder l'option /bin/csh ? ou bien je peux l'enlever.
    Cela dépend de ton système, mais si le script est marqué en exécutable tu pourras le lancer normalement en lui passant des arguments (et pas des instructions comme | ou > ...).

    Citation Envoyé par diamonds
    aussi mon script recoit 13 argument en entrée, et j'ai lu quelques part que la commande exec n'accepte pas beaucoup d'argument. qu'est ce que t'en pense ?
    La limite est celle du système... et elle est généralement bien plus grande !


    a++

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par adiGuba
    Oui... en même temps c'est la seule que j'ai donné donc...




    C'est justement ce que fait mon API (tu as bien lu l'article ???)





    Cela dépend de ton système, mais si le script est marqué en exécutable tu pourras le lancer normalement en lui passant des arguments (et pas des instructions comme | ou > ...).


    La limite est celle du système... et elle est généralement bien plus grande !


    a++
    je viens de t'envoyer un nouveau post et j'attends ta réponse car j'ai une erreur de syntaxe

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    adiGuba

    Voici mon code au complet : il donne une erreur au niveau des bufferedReader car il ne ne reconnait pas process

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    try {
     
     
     
    String[] cmd = new String[14];
    cmd[0] = "/bin/csh";
    // process.getOutputStream().close();
    // process.getInputStream().close();
    // process.getErrorStream().close();
    // process.waitFor();
    cmd[1] = "/usr/local/.../toto.csh";
    cmd[2] = argument1 ;
    ......
    cmd[13] = argument13;
    Runtime rt = Runtime.getRuntime();
    Process process = rt.exec(cmd);
     
     
     
    } catch (IOException ex) {
    ex.printStackTrace();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    // Consommation de la sortie standard de l'application externe dans un Thread separe
    new Thread() {
    public void run() {
    try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    try {
    while((line = reader.readLine()) != null) {
    // Traitement du flux de sortie de l'application si besoin est
    textArea1.setText(line);
    }
    } finally {
    reader.close();
    }
    } catch(IOException ioe) {
    ioe.printStackTrace();
    }
    }
    }.start();
     
    // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
    new Thread() {
    public void run() {
    try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    String line = "";
    try {
    while((line = reader.readLine()) != null) {
    // Traitement du flux d'erreur de l'application si besoin est
    textArea2.setText(line);
    }
    } finally {
    reader.close();
    }
    } catch(IOException ioe) {
    ioe.printStackTrace();
    }
    }
    }.start();
    est-ce que la commande pour lancer le script est correct ?
    pourquoi process n'est pas reconnu ?
    si on traite les entrées/sorties, faut-il aussi les fermer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    process.getOutputStream().close();
    process.getInputStream().close();
    process.getErrorStream().close();
    puis le waitFor est-il nécessaire si on traite les entrées/sorties

    Mille merci.

  15. #15
    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 diamonds
    est-ce que la commande pour lancer le script est correct ?
    Cela me semble correct... sauf que tu devrais fermer le flux d'entré par getOutputStream() précaution (comme tu ne l'utilise pas) et que le try/catch devrait englober le tout (si une erreur survient et empêche la création du process, cela ne sert à rien de le lire.

    Enfin tu peux effectuer une des deux lectures dans le thread courant...

    Citation Envoyé par diamonds
    pourquoi process n'est pas reconnu ?
    Il ne fait pas partie du même bloc. Il faut donc déplacer la thread dans le try/catch puis définir la variable en final pour qu'elle soit accessible depuis les sous-classe...


    Citation Envoyé par diamonds
    si on traite les entrées/sorties, faut-il aussi les fermer avec
    En fermant le BufferedReader cela fermera d'office le flux associé... donc ce n'est pas la peine de les fermer explicitement (a par pour getOutputStream() que tu n'utilises pas)

    Citation Envoyé par diamonds
    puis le waitFor est-il nécessaire si on traite les entrées/sorties
    Le waitFor() te permet simplement d'attendre la fin du process avant de continuer...


    Pour plus de détail tu peux aussi jeter un coup d'oeil à ce tutoriel : Exécuter une application externe en Java

    a++

  16. #16
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par adiGuba
    Cela me semble correct... sauf que tu devrais fermer le flux d'entré par getOutputStream() précaution (comme tu ne l'utilise pas) et que le try/catch devrait englober le tout (si une erreur survient et empêche la création du process, cela ne sert à rien de le lire.

    Enfin tu peux effectuer une des deux lectures dans le thread courant...

    Pour plus de détail tu peux aussi jeter un coup d'oeil à ce tutoriel : Exécuter une application externe en Java

    a++
    et puisque ma commande est correct, pourquoi mon script ne s'execute pas correctement ? alors que sur la ligne de commande il s'exécute à merveille.
    j'ai utilisé le stderr et il me donne une erreur dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stty : Invalid Argument
    qu'est ce que ca veut dire cette erreur?

    Pour le lien, j'ai déjà lu le contenu au moins 3 fois, mais je ne trouve toujours pas la raison pourquoi mon script s'exécute juste en partie.

    La job du du script est de créer des fichiers sur le répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/rep1/rep2/rep3/rep4
    est-ce que il faut avoir des droits d'écriture sur tous les répertoires du chemin ou bien juste sur le dernier répertoire faut-il modifier la variable PATH ?
    L'utilisateur du script et des répertoires est tomcat, sauf pour le répertoire /usr, l'tulisateur est root.

  17. #17
    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 diamonds
    et puisque ma commande est correct, pourquoi mon script ne s'execute pas correctement ? alors que sur la ligne de commande il s'exécute à merveille.
    j'ai utilisé le stderr et il me donne une erreur dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stty : Invalid Argument
    qu'est ce que ca veut dire cette erreur?
    Cette erreur vient de ton script et non pas de l'application Java !
    Peut-être que tu ne lui passe pas exactement les mêmes arguments
    Tu ne dois surement pas lui passer les bons arguments...


    Et c'est pareil pour toutes tes autres question : cela dépend de ton script et plus du code Java...

    a++

Discussions similaires

  1. Gestion des flux avec une Socket
    Par LittleBean dans le forum Langage
    Réponses: 6
    Dernier message: 24/05/2011, 17h47
  2. gestion des flux
    Par vamos dans le forum Développement
    Réponses: 4
    Dernier message: 19/04/2010, 07h10
  3. Gestion des flux
    Par DooSquare dans le forum Sécurité
    Réponses: 0
    Dernier message: 29/07/2008, 07h30
  4. Gestion des flux de matières dans 1 atelier
    Par ptit_bleu dans le forum Schéma
    Réponses: 4
    Dernier message: 23/02/2007, 09h55
  5. Gestion des flux de données
    Par pdiaz dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2007, 16h30

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