Exécuter processbuilder et entrer et de sortie
Que j'essaie de faire mon programme de lancement Enchanteur pour faire un SSH sur mon serveur, mais n'arrive pas à comprendre comment entrer et de sortie pour aller à stdin
et stdout
, ou n'importe où ailleurs. Je viens d'obtenir un vide de la fenêtre de sortie de Netbeans. Comment puis-je obtenir le Pot à exécuter, et d'entrées/sorties?
public class openShell {
public void openShell() throws IOException {
String line;
Scanner scan = new Scanner(System.in);
ProcessBuilder builder = new ProcessBuilder ("C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar", "myscript.bsh");
builder.redirectErrorStream(true);
Process process = builder.start();
OutputStream stdin = process.getOutputStream ();
InputStream stderr = process.getErrorStream ();
InputStream stdout = process.getInputStream ();
BufferedReader reader = new BufferedReader (new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
while (scan.hasNext()) {
String input = scan.nextLine();
if (input.trim().equals("exit")) {
//Putting 'exit' amongst the echo --EOF--s below doesn't work.
writer.write("exit\n");
} else {
writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n");
}
writer.flush();
line = reader.readLine();
while (line != null && ! line.trim().equals("--EOF--")) {
System.out.println ("Stdout: " + line);
line = reader.readLine();
}
if (line == null) {
break;
}
}
}
}
private void LaunchButtonActionPerformed(ActionEvent evt) {
//openShell open = new openShell(); //RUNS BUT NO IN OR OUTPUT
//BELOW CODE IS FOR TESTING, JUST TRYING TO GET PROCESSBUILDER TO CONNECT
//TO MY JAR
try {
ProcessBuilder builder = new ProcessBuilder(
"Java -jar C:\\Program Files\\Java\\lib\\enchanter-beanshell-0.6.jar");
builder.redirectErrorStream(true);
Process process = builder.start();
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
- Êtes-vous à l'aide de Java 6 ou 7? Le ProcessBuilder API est beaucoup améliorée en Java 7.
- Je suis à l'aide de 7. Edit a été d'ajouter de la openShell classe.
Vous devez vous connecter pour publier un commentaire.
La méthode
ProcessBuilder.inheritIO
va rediriger votre commande de flux stdin, stdout et stderr. Cela s'applique à Java 7.De commencer à briser les arguments que ci-dessus. Puis de mettre en œuvre toutes les recommandations de Lors De L'Exécution.exec() ne sont pas.
Les méthodes
Process.getInputStream
etProcess.getOutputStream
vous obtiendrez des flux que vous pouvez ensuite lire et d'écrire.