Externen Prozess starten - entweder stdin oder stderr auslesen

guni

Bekanntes Mitglied
Hallo,

habe folgenden Code:
Java:
private BufferedReader runCommand(Runtime r, File cmd, String[] params, File workingdir) throws IOException
	{
		String[] cmdarray = new String[1 + params.length];
		cmdarray[0] = cmd.getAbsolutePath();
		for (int i = 0; i < params.length; i++) {
			cmdarray[i+1] = params[i];
		}
		/*
		System.out.println("STARTE PROZESS: ");
		for (String s : cmdarray) {
			System.out.println(s);
		}
		*/
		Process p = r.exec(cmdarray, null, workingdir);
		BufferedReader stdin = new BufferedReader(new InputStreamReader(p.getInputStream()));
		BufferedReader stderr = new BufferedReader(new InputStreamReader(p.getErrorStream()));
		try {
			p.waitFor();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return stdin;
	}

Jetzt möchte ich folgendes erreichen:
Wenn Fehler, dann stderr zurückgeben; sonst stdin zurückgeben.
Wie mach ich das?!

Außerdem verstehe ich nicht ganz, warum der Output des externen Commands ein InputStream ist (hab ich so im Netz gefunden und es funktioniert; ich hätte mir den Output aber eher in stdout erwartet -> ???:L)
 
S

SlaterB

Gast
ohne die Ausgaben zu lesen kannst du nicht erkennen, was die Ausgaben sind,
es sei denn du hast über Sockets, angeschlossene USB-Messgeräte oder sonst etwas exotisches näheren Einblick

vielleicht gibts du einen neuen BufferedReader zurück, der aus beiden liest, irgendwas basteln

-----

mit dem Streams muss du dir das so denken:
der andere Prozess schreibt seine Ausgaben in einen Outputstream, so wie System.out.println(),
du willst sie aber nun einlesen, das geht ja auch nur mit einem InputStream, ähnlich System.in
 
Zuletzt bearbeitet von einem Moderator:

guni

Bekanntes Mitglied
Hallo SlaterB.
danke für deine Antwort.
Deine untenstehende Erklärung ist sehr einleuchtend.
Das würde dann theoretisch bedeuten, ich könnte (unter Windows) einen Prozess cmd.exe starten und dann weitere Prozesse über den OutputStream starten, oder (was ja keinen Sinn macht, aber möglich müsste es sein ...)

Was meinen BufferedReader betrifft:
Grundsätzlich wird doch nur ENTWEDER der InputStream ODER der ErrorStream Inhalt haben, oder?!
Kann ich nicht irgendwie feststellen, ob mein Prozess einen dieser beiden Streams "beschrieben" hat?!

mfg, guni

PS.: was meinst du mit basteln? Geht das vom Ansatz in Richtung Thread/PipedStream der StdErr und StdIn liest? Oder gibt es da eine unkompliziertere Möglichkeit?!
 
S

SlaterB

Gast
basteln in Richtung des neu gebastelten Streams aus dem Thread XML-Transformation mit Fortschrittsanzeige,
also eine eigene Klasse, die die anderen Streams intern enthält, bei einem read() auf beide internen read() ausführt und das zurückgibt was da ist,

aber vielleicht reicht auch nur die available()-Methode um das zu prüfen und dann einen Stream zurückzugeben,
hatte ich vorhin vergessen, ob die auch immer richtig funktioniert?..


> Grundsätzlich wird doch nur ENTWEDER der InputStream ODER der ErrorStream Inhalt haben, oder?!

nicht unbedingt, kommt darauf an wer da was sendet,
schonmal in Eclipse ein Programm mit einer normalen Ausgabe und dann einer Exception in roter Schrift gesehen?
viele Programme halten sich sicher an eine Trennung, muss aber nicht sein
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Muss ich die externen jars mitgeben? Java Basics - Anfänger-Themen 8
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
Silvascus Inhalt eines externen Textdokuments an einen String übergeben Java Basics - Anfänger-Themen 2
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
G Externen Button drücken Java Basics - Anfänger-Themen 9
B JAR mit externen JARs in eclipse erstellen Java Basics - Anfänger-Themen 5
C Mit Java Textfeld einer externen Anwendung auslesen Java Basics - Anfänger-Themen 9
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
F Problem mit externen Grafiken und Eclipse Java Basics - Anfänger-Themen 20
R Drucken mithilfe eines Externen ActionListeners Java Basics - Anfänger-Themen 17
M externen Pfad in Jar verwenden Java Basics - Anfänger-Themen 3
J externen code ausführen Java Basics - Anfänger-Themen 8
T Netbeans: Import von Externen Packet Java Basics - Anfänger-Themen 5
Ollek Erstellen einer ausführbaren JAR-Datei mit externen Libaries Java Basics - Anfänger-Themen 9
A Aufruf einer externen schon laufenden Anwendung Java Basics - Anfänger-Themen 3
G JUnit4 mit externen Objecten/Dateien Java Basics - Anfänger-Themen 5
zilti Externen Java-Code laden Java Basics - Anfänger-Themen 3
A Methoden von externen Klassen aufrufen Java Basics - Anfänger-Themen 3
S externen Programmpfad auslesen Java Basics - Anfänger-Themen 4
W Start-Probleme mit externen Bibliotheken / JAR-Bildung Java Basics - Anfänger-Themen 2
A Interaktionen mit externen programmen Java Basics - Anfänger-Themen 21
M Programmverhalten in IDE anders als bei externen Programmen Java Basics - Anfänger-Themen 3
P Externen Proceß starten und warten bis beendet? Java Basics - Anfänger-Themen 2
P Problem: Kann keine externen Pakete importieren Java Basics - Anfänger-Themen 11
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
ralfb1105 Ausgaben von ProcessBuilder Prozess "streamen" Java Basics - Anfänger-Themen 25
A Input/Output Prozess Output genauso in der Konsole ausgeben Java Basics - Anfänger-Themen 0
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
B Gleicher Prozess starten und stoppen (Problem beim Stoppen) Java Basics - Anfänger-Themen 5
B MySQL starten / stoppen -> Stoppen erzeugt neuen Prozess Java Basics - Anfänger-Themen 0
GENiALi Java Console Anwendung starten in Prozess Java Basics - Anfänger-Themen 3
I Datei wird von anderen Prozess verwendet Java Basics - Anfänger-Themen 10
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
B eingene Klasse in eigenem Prozess starten mit relativem Pfad Java Basics - Anfänger-Themen 5
X Vollkommen Unabhängigen Prozess starten Java Basics - Anfänger-Themen 8
L Prozess beenden Java Basics - Anfänger-Themen 3
C Prozess wird erst bei Beendigung des Programms ausgeführt Java Basics - Anfänger-Themen 2
C Prozess Fehlerbehandlung Java Basics - Anfänger-Themen 2
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
W Java ProcessBuilder - externer Prozess nur einmal starten und mehrere Inputs geben Java Basics - Anfänger-Themen 7
B Prozess wird nicht beendet Java Basics - Anfänger-Themen 2
S Prozess auslesen und starten Java Basics - Anfänger-Themen 9
M prozess-managment Windows java Java Basics - Anfänger-Themen 4
L Prozess rückgabewert? Java Basics - Anfänger-Themen 5
T BufferedReader oder Prozess, wer hängt sich auf? Java Basics - Anfänger-Themen 6
S mit getRuntime.exec gestarteten Prozess überwachen Java Basics - Anfänger-Themen 2
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
S Prozess paralell starten Java Basics - Anfänger-Themen 5
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
M prüfen, ob Prozess fertig mit Abarbeitung. wie? Java Basics - Anfänger-Themen 11
N cmd aus java starten; prozess beenden Java Basics - Anfänger-Themen 11
R Warten, bis ein Prozess gestartet wurde Java Basics - Anfänger-Themen 23
ven000m Java Prozess beenden? Java Basics - Anfänger-Themen 2
H Github Projekt starten/anbinden in eclipse Java Basics - Anfänger-Themen 11
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
Dimax Java Programm mit exec starten Java Basics - Anfänger-Themen 5
pkm Eclipse wie mit anderer JAVA-Version starten? Java Basics - Anfänger-Themen 1
K Kann nicht starten Java Basics - Anfänger-Themen 63
S Mit Cloud Messaging Service starten Java Basics - Anfänger-Themen 2
S Android Service ferngesteuert starten Java Basics - Anfänger-Themen 5
W Threads starten Java Basics - Anfänger-Themen 2
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
J script: jar Datei starten auf Mac Os Java Basics - Anfänger-Themen 2
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
B Mit Java anderes Java Programm starten Java Basics - Anfänger-Themen 3
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
L Eine Klasse aus dem gleichen Package starten Java Basics - Anfänger-Themen 3
G Wie kann ich mein Quellcode als Programm vom desktop starten? Java Basics - Anfänger-Themen 1
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
M Objekt starten von der main-Methode Java Basics - Anfänger-Themen 1
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
lgund Classpath Raspberry Pi 3 FX Starten Java Basics - Anfänger-Themen 4
B .bat - Datei starten ohne Konsolenfenster zu sehen Java Basics - Anfänger-Themen 6
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
J Classpath Programm aus Programm heraus starten Java Basics - Anfänger-Themen 1
K Methoden Programm ohne Main Methode starten Java Basics - Anfänger-Themen 2
P Javaprogramm mit einer bestimten Version starten Java Basics - Anfänger-Themen 5
R externes Programm starten Java Basics - Anfänger-Themen 12
U jar aus RAM heraus starten Java Basics - Anfänger-Themen 21
O Probleme mit Starten Java Basics - Anfänger-Themen 2
T jar von stick aus über jre auf stick starten Java Basics - Anfänger-Themen 6
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben