Process - Ausgabe leer

schlingel

Gesperrter Benutzer
Hallo Leute, ich hab folgendes Problem: Ich möchte per WMI Infos vom PC auslesen. Da es sich bei der App um eine Webstart-App handelt, möchte ich weder DLLs noch sonst irgendwelche zusätzlichen JARs ausliefern.

Meine erste Idee war also die WMIC per Process auszuführen und die Ausgabe zu parsen.

So kann ich z.B. wenn ich lokal am PC sitze per "wmic memphysical" einiges über den vorhandenen Speicher in Erfahrung bringen.

Doch wenn ich das ganze per Java-Process ausführe, bekomme ich keine Ausgabe. Der Prozess cheint stehen zu bleiben. Mein erster Verdacht: Das Ding startet im CLI Modus. Nagut, Workaround ist schnell gefunden: Ich verwende eine Bat-Datei und starte über die das ganze.

Doch das Resultat bleibt das gleiche. Die Ausgabe bleibt leer.

Zu Testzwecken hab ich dann folgende Bat-Datei geschrieben:
Code:
wmic memphysical > ./temp.txt

Führe ich das File aus funktioniert es.

Führe ich das Script per Java aus, funktioniert es nicht. Mit folgendem Code tue ich das:
Code:
               File tmpFile = File.createTempFile("tmp2", ".txt");
		tmpFile.deleteOnExit();
		System.out.println("Pfad: " + tmpFile.getParent());
		File exec = new File(tmpFile.getParent(), "test.bat");
		List<String> execs = new ArrayList<String>();
		execs.add(exec.getAbsolutePath());
		System.out.println(exec.getAbsolutePath());
		
		ProcessBuilder pb = new ProcessBuilder(execs);
		pb.directory(tmpFile.getParentFile());
		Process p = pb.start();
		Scanner s = new Scanner(p.getInputStream());
		
		if(s.hasNextLine()) {
			System.out.println(s.nextLine());
			p.destroy();
		}
		
		s.close();
		System.out.println("Ergebnis: " + p.waitFor());

Das File liegt im Temp-Verzeichnis. Es existiert und wenn ich es mit Doppelclick starte, tut es was es soll. Starte ich es per Java wird das temp.txt angelegt, bleibt aber leer. Der Prozess hat irgendwelche Probleme denn er returniert immer 1.

Ich weiß aber nicht woran es liegt. Irgendwelche Ideen?
 

schlingel

Gesperrter Benutzer
Hm, wo genau meinst du dass es hingehört? Nach dem Scannen der Ausgabe habe ich es ja eh in der Zeile:
Code:
System.out.println("Ergebnis: " + p.waitFor());

Und vorher hat das glaub ich keinen Sinn.
 

FArt

Top Contributor
Der startende Thread sollte auf das Ende des Prozesses warten, das Auslesen von STDOUT sollte in einem eigenen Thread laufen. STDERR nicht vergessen, da kann auch was kommen.
 

schlingel

Gesperrter Benutzer
Hallo - ja genau das ist es dann gewesen.

Code:
	stdOutReader = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("Starting reading");
				if(wmicProc == null)
					return;
				
				wmicOutput = "";
				Scanner s = new Scanner(wmicProc.getInputStream());
				String curLine = "";
				
				while(s.hasNextLine()) {
					curLine = s.nextLine();
					wmicOutput += curLine;
					
					System.out.println(curLine);
				}
			}
		});
		
		stdErrReader = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("Starting reading");
				
				if(wmicProc == null)
					return;
				
				wmicErrOutput = "";
				Scanner s = new Scanner(wmicProc.getErrorStream());
				String curLine = "";
				
				while(s.hasNextLine()) {
					curLine = s.nextLine();
					wmicErrOutput += curLine;
					
					System.out.println("Error: " + curLine);
				}				
			}
		});

Damit initialisiere ich die zwei Reader-Thread. So starte ich dann den Thread:

Code:
		List<String> execs = new ArrayList<String>();
		execs.add(WMIC_COMMAND);
		execs.add(WMIC_PHYSICAL_MEMORY);
		System.out.println(WMIC_PHYSICAL_MEMORY);
		
		//String exec = String.format("%s %s", getWmicPath(), WMIC_PHYSICAL_MEMORY);

		ProcessBuilder pb = new ProcessBuilder(execs);
		pb.directory(tmpFile.getParentFile());
		wmicProc = pb.start();
		
		stdOutReader.start();
		stdErrReader.start();
		
	
		BufferedWriter w = new BufferedWriter(new PrintWriter(wmicProc.getOutputStream()));
		w.close(); 
		
		System.out.println("Ergebnis: " + wmicProc.waitFor());

		stdOutReader.interrupt();
		stdErrReader.interrupt();

Des Problems Lösung war wohl das:
Code:
		BufferedWriter w = new BufferedWriter(new PrintWriter(wmicProc.getOutputStream()));
		w.close();

Ohne diese zwei zeilen funktioniert es nicht. Den stderr-Reader kann ich aber z.B. wegnehmen. Wenn da wer Hintergrundinformationen hat wäre ich sehr interessiert :)
 

xjCoder

Aktives Mitglied
Danke für diese Info! :toll:

Ich bin letzte Woche auf die gleiche Problematik gestossen
und habe mich dann im Endeffekt über JNI gerettet. :autsch:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Java Process OutputStream ist null Allgemeine Java-Themen 4
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
T Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
J Download: Filename + Process waitFor() Allgemeine Java-Themen 5
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
G Process.destory() == CTRL+C Allgemeine Java-Themen 2
P Swing GUI Process anzeigen Allgemeine Java-Themen 10
F Process.getInputStream unter Linux Allgemeine Java-Themen 7
G ungepufferter Process.getInputStream Allgemeine Java-Themen 10
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
G Process - mehrere Commands?! Allgemeine Java-Themen 2
MQue auf gestarteten Process warten Allgemeine Java-Themen 7
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
P Bedeutung der Process.exitValue() Werte? Allgemeine Java-Themen 3
J Process auf Console anzeigen lassen. Allgemeine Java-Themen 5
S Process - Befehle senden Allgemeine Java-Themen 13
B Process Builder Allgemeine Java-Themen 10
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
J process.getInputStream() hängt auf merkwürdige Art und Weise Allgemeine Java-Themen 7
D Fremdes Programm schließen (ohne process.destroy()) Allgemeine Java-Themen 8
S process.waitFor() endet mit -1 Allgemeine Java-Themen 3
M Process -> getInputStream -> nur gepuffert ? Allgemeine Java-Themen 12
A Runtime Process bricht nicht ab! Allgemeine Java-Themen 7
C Process output Allgemeine Java-Themen 7
kodela Gemittelte Ausgabe von Buchstaben Allgemeine Java-Themen 11
L Event Handling Ausgabe von Radioboxen und befüllen von Comboboxen Allgemeine Java-Themen 1
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
B Game of life Ein und Ausgabe Configurations Datei Allgemeine Java-Themen 17
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
M Input/Output CMD Ausgabe als ButtonEvent Allgemeine Java-Themen 5
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
B JFrame Text Ausgabe Allgemeine Java-Themen 7
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
J Ausgabe nach Excel Allgemeine Java-Themen 1
balwan Unverständlichkeit einer Ausgabe Allgemeine Java-Themen 4
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
B Barcode4j Ausgabe Formatieren Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
T Ausgabe falsch! Allgemeine Java-Themen 5
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
P Falsche Ausgabe Allgemeine Java-Themen 5
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
D Ausgabe von C# Konsolenanwendung lesen Allgemeine Java-Themen 5
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
P Pdf ausgabe Allgemeine Java-Themen 3
C Ausgabe unklar Allgemeine Java-Themen 2
J Applet Ausgabe beim Speichern ausblenden Allgemeine Java-Themen 4
Rudolf Java Ausgabe einer Texttabelle im Prompt Allgemeine Java-Themen 4
P Ausgabe der berechneten Fakultaet Allgemeine Java-Themen 12
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
E formartierte Ausgabe zur Laufzeit Allgemeine Java-Themen 2
D Bildschirm Flackert bei Ausgabe Allgemeine Java-Themen 4
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
R log4j - Ausgabe der Logs Allgemeine Java-Themen 3
L in zufälligen Sekunden Ausgabe machen Allgemeine Java-Themen 2
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
O Backslashes werden in der Ausgabe nicht übernommen Allgemeine Java-Themen 5
X Ausgabe auf JEditorPane Allgemeine Java-Themen 5
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
A Ausgabe in OpenOffice Calc oder pdf Allgemeine Java-Themen 3
T Ausgabe in txt.Datei speichern Allgemeine Java-Themen 23
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
M Consolen Ausgabe Allgemeine Java-Themen 3
G Ausgabe mit tag Allgemeine Java-Themen 3
W Ausgabe von Fließkommazahlen formatieren Allgemeine Java-Themen 2
D Ausgabe HTML-Seite Allgemeine Java-Themen 5
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
G Ausgabe in eine txt Datei schreiben? Allgemeine Java-Themen 7
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
J Ausgabe der Quelltext Zeilennummer? Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
X e.printStackTrace Ausgabe in Datei umleiten? Allgemeine Java-Themen 14
B Ausgabe mit print wird verzögert Allgemeine Java-Themen 9
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
M Ausgabe in Console formatieren`? Allgemeine Java-Themen 12
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
H falsche ausgabe Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben