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

avec Java Discussion :

Execution d'une commande systeme


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 66
    Points
    66
    Par défaut Execution d'une commande systeme
    Bonjour,

    Je cherche à executer une commande systeme (du style "dir" ou "ls") tout d'abord en local puis sur un serveur aix avec un programme Java.

    Quelqu'un sait comment on peut fiaire ca ?

  2. #2
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    salut !

    Pour le local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process proc = Runtime.getRuntime().exec("dir C:");
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  3. #3
    Membre habitué Avatar de bygui
    Homme Profil pro
    PLM/ALM
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : PLM/ALM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 185
    Points
    185
    Par défaut
    et utilise
    il permet d'attendre la fin de ta commande
    Laisser un message après le Bug!

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 66
    Points
    66
    Par défaut
    Merci pour ta reponse mais quand je lui passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd");
    Je ne cree pas de fenetre de commande, de plus lorsque j'execute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("dir c:");
    voici l'erreur que j'ai :

    java.io.IOException: Cannot run program "dir": CreateProcess error=2, Le fichier spécifié est introuvable

    Je ne comprends pas pourquoi.

    De plus si quelqu'un sait comment envoyer des commandes vers un serveur unix, je suis preneur.

    Merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    C'est normal que "cmd" ne crée pas de fenêtre, si tu veux une autre fenêtre il faut utiliser la commande "start".

    Ensuite je te conseille d'utiliser un processbuilder et il faut aussi penser à lire l'oupoutstream de ton process pour éviter qu'il bloque.
    voici un petit exemple simple
    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
                ProcessBuilder processbuilder = new ProcessBuilder ("cmd","/c","dir c:");                      
                final Process process = processbuilder.redirectErrorStream(true).start(); 
                Thread streamReaderRunnable = new Thread (){
     
                    @Override
                    public void run() {
                        InputStream input = process.getInputStream();
                        int readByte;
                        try {
                            readByte = input.read();
                            while (readByte != -1){
                                System.out.print ((char)readByte);
                                readByte = input.read();
                            }
                        } catch (IOException e) {
                            //What do you want to do ?
                            e.printStackTrace();
                        }                                        
                    }
     
                };
                streamReaderRunnable.start();
                streamReaderRunnable.join()
    Pour les commandes sur un host unix tu peux utiliser la commande "rsh"
    Enjoy

  6. #6
    Membre habitué Avatar de bygui
    Homme Profil pro
    PLM/ALM
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : PLM/ALM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 185
    Points
    185
    Par défaut
    ou si tu veux la simplicité fait une redirection de flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd="macommande > unFichier";
    ...
    //tu attend la fin
    monProc.waitFor();
    Ensuite tu lis le fichier créé
    Laisser un message après le Bug!

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 66
    Points
    66
    Par défaut
    C'est bon, finalement j'aurai du mieux chercher avant, j'ai trouvé la solution sur le forum :

    il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String cmd = "cmd /c c:\\WINNT\\notepad.exe";
    Process p = Runtime.getRuntime().exec(cmd);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p = Runtime.getRuntime().exec("cmd /c c:\\WINNT\\notepad.exe");
    Merci de votre aide.

  8. #8
    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 ganjah06 Voir le message
    Merci pour ta reponse mais quand je lui passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd");
    Je ne cree pas de fenetre de commande,
    C'est tout à fait normal : les entrées/sorties du programme sont mappé avec la classe Process et les méthodes get***Stream()

    En clair les opérations d'entrées/sorties du process doivent être traité par le programme Java (et depuis des threads différents pour éviter les interblocages).

    Citation Envoyé par ganjah06 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("dir c:");
    voici l'erreur que j'ai :

    java.io.IOException: Cannot run program "dir": CreateProcess error=2, Le fichier spécifié est introuvable

    Je ne comprends pas pourquoi.
    Runtime.exec() permet de lancer une application. Or sous Windows dir n'est pas une application ! Il n'existe aucun programme dir, il s'agit simplement d'une fonction builtin du shell, et il faut donc utiliser le shell pour l'exécuter... C'est à dire cmd.exe sous Windows NT/2000/XP, command.com sous Windows 9x ou /bin/sh sur les Unix/Linux...

    Citation Envoyé par bygui Voir le message
    ou si tu veux la simplicité fait une redirection de flux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmd="macommande > unFichier";
    Cela ne marchera pas comme cela : exec() permet seulement de lancer un programme, mais pas d'interpréter une ligne de commande : c'est le rôle du shell.

    Si tu veux faire une telle redirection il faut appeler le shell avec la ligne de commande en paramètre...


    Citation Envoyé par ganjah06 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String cmd = "cmd /c c:\\WINNT\\notepad.exe";
    Process p = Runtime.getRuntime().exec(cmd);
    Il est inutile d'utiliser le shell (cmd /c) pour un programme comme notepad, tu pourrais le lancer directement...

    Par contre il est préférable de quand même fermer les flux (même si on ne les utilises pas dans ce cas).



    Plus d'info :



    a++

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

Discussions similaires

  1. Execution d'une commande via system(1,"$cmd")
    Par alexis973 dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2013, 16h43
  2. Executer une commande System en silence ?
    Par t0ny95 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/08/2008, 15h44
  3. executer une commande system
    Par warubi dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/05/2007, 22h57
  4. Execution d'une commande systeme enC?
    Par must19 dans le forum Linux
    Réponses: 4
    Dernier message: 12/04/2006, 19h08
  5. [System][EXEC] Probleme d'execution avec une commande parametrée.
    Par chicorico dans le forum Général Java
    Réponses: 15
    Dernier message: 20/05/2005, 15h07

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