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

Java Discussion :

PrintWriter en JAVA pour la lecture des commandes shell


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 13
    Points
    13
    Par défaut PrintWriter en JAVA pour la lecture des commandes shell
    Bonjour,

    Je suis entrain d'executer des commandes shell a partir de java. En fait, la seconde etape est de stocker les resultats (output) de chaque commande executee dans une variable (String) separemment.

    Voici le morceau de code :

    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
     
                    File wd = new File("/bin");
    		System.out.println(wd);
    		Process proc = null;
    		StringBuilder builder = new StringBuilder();
     
     
    		try {
    			   proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
    			}
    			catch (IOException e) {
    			   e.printStackTrace();
    			}
     
     
    			if (proc != null) {
    				   BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    				   PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
    				    List<PrintWriter> outs= new ArrayList();
    				    PrintWriter out2 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
     
     
     
    				   out.println("cd ..");
     
     
    				   System.out.println("moving to the parent directory");
    				   out.println("cd /var/");
    				   out.println("ls");
     
    				   out.println("cd ..");
    				   out.println("cd /etc/");
    				   out.println("ls -a");
    				   out.println("ps");
    				   outs.add(out);
    				   out2.println("ls -la");
    				   outs.add(out2);
    				   out.println("exit");
    				   List arrayLines = new ArrayList();  
    				   try {
    					      String line;
    					      while ((line = in.readLine()) != null) {
    					    	  arrayLines.add(line);  
    					        builder.append(line).append("\n");
     
    					      }
     
    					      String commandOutput = builder.toString();
    					      logger.debug("here is the command in string"+commandOutput);
     
    					      System.out.println(arrayLines + "\n");  
     
    					      proc.waitFor();
    					      in.close();
    					      out.close();
    					      proc.destroy();
    					   }
    					   catch (Exception e) {
    					      e.printStackTrace();
    					   }
    					}
    Le resultat obtenu de toutes les commandes shell est dans une variable String commandOutput. Le but est de stocker pour chaque output d'une commande shell dans une variable String ...Merci

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Le tuto qui va bien :
    http://ydisanto.developpez.com/tutor.../runtime-exec/

    regarde du coté de getOutputStream...

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci pour le lien. j' ai deja teste avec ce morceau de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Runtime runtime = Runtime.getRuntime();
    String[] args = { "/bin/sh", "-c", "ls / >fichier.txt" };
    final Process process = runtime.exec(args);
    mais la variable args ne contient qu'une seule comamde shelle a executer en plus on pourra pas souvegarder l execution de chaque commande shell dans une variable a part. je devrait attribuer pour plus que 20 output des commandes shell dans des vraiables separemment.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    pourquoi passer par le shell? Les commandes de type cd sont inutiles pour ton application, tout ce qui t'intéresse c'est la sortie des applications.

    Lance simplement des trucs du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ProcessBuilder pb = new ProcessBuilder("ls", "-a");
    pb.directory("/etc");
    process = pb.start();
    // traitement
    pb = new ProcessBuilder("ps");
    process = pb.start();
    // traitement
    pb = new ProcessBuilder("ls", "-la");
    pb.directory("/etc");
    process = pb.start();
    // traitement

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre reponse, je pense que je n ai pas bien explique l'objectif du test:

    Tout simplement, je pourrais lancer des commandes shell du java, mais le probleme reste au niveau de stocker chaque resulat pour chaque commande a part dans une variable. Ce qui est deja fait et que je pourrais stocker le output de l'ensemble des commandes a la fois dans le meme variable.
    En plus, je dois parcourir les repertoires avec la commande cd chaque fois pour avoir la liste par exemple des fichiers dedans. bien sur la commande 'cd' ne figurera pas de output a stocker .

    L idee est de sauvegarder dans un tableau pour chaque commande son output associee

Discussions similaires

  1. API ou bien JDK java pour la gestion des photos?
    Par gh_rachid dans le forum Multimédia
    Réponses: 0
    Dernier message: 27/02/2014, 16h33
  2. program java pour la composition des service web
    Par bleu angle dans le forum Services Web
    Réponses: 0
    Dernier message: 04/04/2009, 12h33
  3. Réponses: 2
    Dernier message: 06/02/2009, 12h10
  4. Creation d'une API JAVA pour envoyer/recevoir des sms
    Par issiaga isaac dans le forum Multimédia
    Réponses: 1
    Dernier message: 04/07/2008, 16h02
  5. [EMF] Java pour la lecture d'EMF
    Par deepfred dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/04/2005, 15h39

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