Appel de commande shell unix en java

Appel de commande shell unix en java - Java - Programmation

Marsh Posté le 23-03-2006 à 15:03:44    

Salut a tous,
 Je suis entrain de reprendre mes cours et notes de Java et à l'instant ou je vous parle, je me pose une question.
Peut on faire et si oui comment apeller des commandes de shells Unix dans un programme?

Reply

Marsh Posté le 23-03-2006 à 15:03:44   

Reply

Marsh Posté le 23-03-2006 à 16:17:20    

obut76 a écrit :

Salut a tous,
 Je suis entrain de reprendre mes cours et notes de Java et à l'instant ou je vous parle, je me pose une question.
Peut on faire et si oui comment apeller des commandes de shells Unix dans un programme?


.
Tu peux regarder la doc pour la classe Runtime et l'utilisation de la fonction exec.


---------------
Linux registered user #352556
Reply

Marsh Posté le 23-03-2006 à 16:23:37    

C'est ce que je viensd de faire, merci par contre avec le code suivant:
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)     throws Exception {
        // TODO code application logic here
 
        System.out.println("Appel de commandes UNIX en java" );
        /*Déclaration des variables*/
        String [] tab_commandes = new String[2];
        int cpt_tab=0;
         
         
        /*Initialisations du tableau des commandes*/
        tab_commandes[0]="/bin/ls";
        tab_commandes[1]="/home/obut76";
         
        System.out.println("Contenu du tableau des commandes:" );
        while (cpt_tab < tab_commandes.length)
        {
            System.out.println("Col. "+ cpt_tab + " -> " + tab_commandes[cpt_tab]);
            cpt_tab++;
        }
         
        Process processus=Runtime.getRuntime().exec(tab_commandes);
        System.out.println("Processus: " + processus);
        System.out.println("processus.getOutputStream(): " + processus.getOutputStream());
        System.out.println("Fin de l'appel de commandes UNIX en java" );
         
         
    }
     
}
 
Je m'attendais en plus de mes println de bases a avoir un résultat sur la sortie standard...me trompes je?
 
Aprés je me remets à mes révisions...lol

Reply

Marsh Posté le 23-03-2006 à 16:33:54    

Si tu veux récupérer la sortie standard de ton process, c'est processus.getInputStream() qu'il faut utiliser (Cf. javadoc de Process).
 

Reply

Marsh Posté le 23-03-2006 à 16:41:00    

merci je vais voir

Reply

Marsh Posté le 23-03-2006 à 16:44:59    

obut76 a écrit :

merci je vais voir


 
Et de plus, faire un println, que ce soit sur un Input ou un OutputStream, ca te retourne l'adresse de la variable dans la JVM et pas son contenu.
 


---------------
Linux registered user #352556
Reply

Marsh Posté le 23-03-2006 à 17:15:39    

faire appel à des commandes de l'OS enlève à JAVA sa puissance de portabilité. A vrai dire, il n'a pas été conçu pour ce genre de chose, bien qu'il le permet quand même. Donc à utiliser avec des pincettes.

Reply

Marsh Posté le 23-03-2006 à 17:37:07    

moi23372 a écrit :

faire appel à des commandes de l'OS enlève à JAVA sa puissance de portabilité. A vrai dire, il n'a pas été conçu pour ce genre de chose, bien qu'il le permet quand même. Donc à utiliser avec des pincettes.


 
Tout à fait. Toutefois si c'est pour une utilisation des commandes de base Unix, la portabilité sera juste perdue pour windows. Encore qu'il vaut mieux faire gaffe aux options qui sont pas forcément les mêmes d'un Unix à l'autre.


---------------
Linux registered user #352556
Reply

Marsh Posté le 24-03-2006 à 12:16:25    

Au fait quel est le but de ton programme ?
 
Si ce que tu veux faire, c'est voir comment on peut executer des commandes du système alors j'ai rien à dire.
 
Par contre si ton but est de lister les fichiers d'un répertoire alors il y a un moyen de faire ça autrement.
 
Cf. la classe java.io.File qui contient tout ce qu'il faut.
En particulier la méthode list() qui retourne la liste des fichiers et répertoires ;)
 

Reply

Marsh Posté le 20-10-2006 à 17:45:01    

Moi j'ai un petit problème je voudrais faire la même chose mais sous windows; en gros je voudrais lancer la commande "cls" pour nétoyer la console mais je ne vois pas comment faire :/ Tout ce que je trouve ne marche pas, quelqu'un aurait une idée svp? :(


---------------
"C'est vrai qu'un type aussi pénible de jour on serait en droit d'espérer qu'il fasse un break de nuit mais bon …"
Reply

Marsh Posté le 20-10-2006 à 17:45:01   

Reply

Marsh Posté le 21-10-2006 à 00:13:10    

Pour connaitre le nom de l'OS, la commande System.getProperty("os.name" ) retourne le nom du système d'exploitation. Les OS Windows commencent toujours par "Windows".
 
Ensuite, il faut utiliser rundll32
http://www.javaworld.com/javaworld [...] tip66.html

Reply

Marsh Posté le 17-08-2009 à 17:16:31    

Je suis totalement débutant en java mais j'ai hérité d'une application en java dans laquelle je dois faire un appel à une commande Unix du style 'ps -ef'.
L'application tourne sous IE et la machine est sous unix.
J'ai lu tous les posts mais serait-il possible d'avoir un bout de code pour éclaircir la réponse s'il vous plait  car je ne vois pas comment faire cet appel et récupérer le résultat de la commande.
Merci

Reply

Marsh Posté le 17-08-2009 à 17:30:46    

Merci pour ce déterrage...
 
j'hésite entre STFW, LMGTFY et RTFM... ^^

Reply

Marsh Posté le 17-08-2009 à 17:52:04    

hello regarde ma classe
 
la doc
http://gadille.free.fr/doc/java/te [...] Utils.html
la classe
http://gadille.free.fr/doc/java/te [...] ssing.java
le test
http://gadille.free.fr/doc/java/te [...] ssing.java
 
un exemple d'utilisation  
SystemProcessing sp = new SystemProcessing();
sp.executeCmd("hostname -i" );
ip=sp.readLine(2);
 
 
 

Reply

Marsh Posté le 17-08-2009 à 17:52:25    

tu a d'autre doc sur mon site http://gadille.free.fr

Reply

Marsh Posté le 18-08-2009 à 11:27:33    

Merci, j'ai trouvé la réponse.

Reply

Marsh Posté le 19-08-2009 à 14:22:59    

moi23372 a écrit :

faire appel à des commandes de l'OS enlève à JAVA sa puissance de portabilité. A vrai dire, il n'a pas été conçu pour ce genre de chose, bien qu'il le permet quand même. Donc à utiliser avec des pincettes.


 
C'est juste. Cependant, existe-t-il une méthode en java permettant de connaitre la liste des process tournant sur la machine (le serveur Unix) ? Cela éviterait justement l'appel à des commandes unix. Le but étant de regarder si un traitement shell est en cours d'exécution pour ne pas faire de déplacement de fichier intempestif pendant ce temps.

Reply

Marsh Posté le 19-08-2009 à 17:10:35    

gillin a écrit :


 
C'est juste. Cependant, existe-t-il une méthode en java permettant de connaitre la liste des process tournant sur la machine (le serveur Unix) ? Cela éviterait justement l'appel à des commandes unix. Le but étant de regarder si un traitement shell est en cours d'exécution pour ne pas faire de déplacement de fichier intempestif pendant ce temps.


 
t'as une ip chinoise? t'as pas accès à google? :P
 
en tout cas je ne crois pas que ce soit possible... au mieux tu peux peut être lister les jvm qui sont en cours, mais c'est tout.

Reply

Marsh Posté le 19-08-2009 à 17:21:40    

pataluc a écrit :


 
t'as une ip chinoise? t'as pas accès à google? :P
 
en tout cas je ne crois pas que ce soit possible... au mieux tu peux peut être lister les jvm qui sont en cours, mais c'est tout.


 
C'est bien parce que j'ai accès à google que j'ai eu la référence de ce site sur lequel je m'informe ... :pt1cable:  
 
Merci tout de même. :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed