Bonjour,
J'ai besoin d'utiliser plink pour envoyer des commandes en SSH via Putty (je ne peux pas utiliser les librairies en SSH, il n'y a pas assez de flexibilité pour installer tout un serveur ou gérer des panneaux de configuration graphiques).
Ca marche parfaitement mais j'ai un soucis avec la gestion du Shell, en fait j'ai mis un commentaire dans le programme (//MON PROBLEME). Normalement je met Thread.sleep (1000); pour attendre que le programme affiche la sortie avant de lancer les prochaines commandes.
Le souci c'est que lors d'une installation serveur le temps que ça prend est très variable et qu'il faut que je le minimise. Il faudrait donc que je détecte quand ça me rend la main pour que je passe à la suite. Mais j'ai essayé toutes les commandes waitFor, wait, etc qui me passait par la tête et je ne trouve pas de solution à ce souci.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; public class Console { private InputStream std; private OutputStream out; private InputStream err; Process p; Runtime r; private BufferedReader getOutput(Process p) { return new BufferedReader(new InputStreamReader(p.getInputStream())); } private BufferedReader getError(Process p) { return new BufferedReader(new InputStreamReader(p.getErrorStream())); } void commande(String commande) throws IOException, InterruptedException { commande(commande,false); } void commande(String commande,boolean cacherCommande) throws IOException, InterruptedException { out.write((commande+"\n").getBytes ()); out.flush(); if(!cacherCommande) System.out.println ("< "+commande); //MON PROBLEME //p.waitFor(); //Thread.sleep (1000); viderFlux() ; } void viderFlux() throws IOException { int value = 0; if (std.available () > 0) { System.out.print("> "); value = std.read (); System.out.print ((char) value); while (std.available () > 0) { value = std.read (); System.out.print ((char) value); } } if (err.available () > 0) { System.out.println ("ERREUR:"); value = err.read (); System.out.print ((char) value); while (err.available () > 0) { value = err.read (); System.out.print ((char) value); } } } void demarrer() { try { String adresseServeur="000.000.000.000"; String command = "plink "+adresseServeur; r = Runtime.getRuntime (); p = r.exec (command); std = p.getInputStream (); out = p.getOutputStream (); err = p.getErrorStream (); viderFlux(); commande("root"); commande("******"); p.destroy (); } catch (Exception e) { e.printStackTrace (); } } }
Partager