Input/Output Writer schreibt nicht in Subprozess

Deness

Neues Mitglied
Hallo zusammen,

ich möchte aus meinem Java-Programm eine Shell starten und mit dieser kommunizieren:

Java:
ProcessBuilder pb = new ProcessBuilder("xterm").redirectErrorStream(true);

		try {
			Process shell = pb.start();

			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(shell.getInputStream()));
			PrintWriter writer = new PrintWriter(shell.getOutputStream(), true);

			String input = "su - meinUser\n";
			writer.println(input);
			log.addInfo("error occurred: " + writer.checkError());

			input = "meinPasswort\n";
			writer.println(input);
			log.addInfo("error occurred: " + writer.checkError());

			// exit meinUser
			input = "exit\n";
			writer.println(input);
			log.addInfo("error occurred: " + writer.checkError());

			// exit xterm
			input = "exit\n";
			writer.println(input);
			log.addInfo("error occurred: " + writer.checkError());

			writer.close();
			shell.destroy();
		} catch (IOException e) {
			log.addInfo("Error occurred while executing Linux command. Error Description: " + e.getMessage());
		}

Der PrintWriter schreibt leider nicht nach stdin meines Prozesses. Ich habe auch write() und flush() probiert. Alles ohne Erfolg. Hat jemand eine Idee, was ich falsch mache oder ist es gar nicht möglich, über Java interaktiv (schreiben und Ergebniss des Subprozesses lesen) mit einem gestarteten Subprozess zu kommunizieren (wie man das bspw. aus Python kennt).

Vielen Danke für eure Antworten!
Deness
 
1) woran machst du es fest das es nicht funktioniert ?
2) du musst von deinem reader auch schon lesen ... wenn der voll ist wartet der sub-process in der regel darauf bis dieser geleert wird
3) da du zwischen dem su-login und dessen exit keine weiteren befehle aufrufst läuft es warscheinlich einfach so schnell ab das man es nicht mitbekommt
4) gibt es irgendwelche fehlermeldung ? wenn ja , welche und wo ...

ansich ist die "interaktion" mit dem sub-process möglich ... aber etwas komplizierter als du hier geschrieben hast ... und für hilfe brauchen wir ein paar mehr infos als nur "naja geht halt nich"
 
Hallo,

danke für die Antwort zwischen su und exit mache ich noch weitere Befehle bspw. das Starten einer Datenbank von der Kommandozeile. Die Datenbank wird jedoch nicht gestartet. Daher denke ich, dass mein Code nicht funktioniert. Ich habe auch mit readLine() gelesen, aber dann passiert einfach gar nichts, der Writer scheint nicht zu schreiben, wenn ich im readLine()-Loop bin. Immerhin ich kann in dem gestarteten xterm manuell etwas eintippen, das funktioniert auch.

Deness
 
grundsätzlich als Alternative erwähnt: scheibe alles in eine .sh-Datei und führe diese aus,
 

Zurück
Oben