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 ?
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 ?
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
et utilise
il permet d'attendre la fin de ta commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 proc.waitFor()
Laisser un message après le Bug!
Merci pour ta reponse mais quand je lui passe :
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("cmd");
voici l'erreur que j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Runtime.getRuntime().exec("dir c:");
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
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
Pour les commandes sur un host unix tu peux utiliser la commande "rsh"
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()
Enjoy
ou si tu veux la simplicité fait une redirection de flux
Ensuite tu lis le fichier créé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 cmd="macommande > unFichier"; ... //tu attend la fin monProc.waitFor();
Laisser un message après le Bug!
C'est bon, finalement j'aurai du mieux chercher avant, j'ai trouvé la solution sur le forum :
il faut faire :
ou
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);
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Process p = Runtime.getRuntime().exec("cmd /c c:\\WINNT\\notepad.exe");
Salut,
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).
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...
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...
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 :
- Tutoriel : Exécuter une application externe en Java
- Blog : Runtime.exec() n'est pas des plus simple...
a++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager