
Quant
Threadstarter
- Dabei seit
- 19.07.2011
- Beiträge
- 67
Hi Leute,
ich habe folgendes Problem:
In Java kann man mittels
ein Programm starten (Beispielsweise notepad.exe als Kommando startet den Windowseditor)
Man kann sogar mittels:
den Input stream ermittlen bzw. mit
den Ausgabestream des Programmes bestimmen und dann mithilfe von
bzw.
Kommandos an ein einfaches Konsolenprogramm schicken, bzw. von diesem annehmen, also das Programm fernsteuern.
Das ganze funktioniert allerdings nur solange, wie das Programm keinen ungepufferten Ausgabestream hat. Programme mit gepufferten Ausgabestreams können damit leider nicht gesteuert werden, obwohl ich das gerne tun würde.
; weiß dazu jemand eine Lösung? (Möchte nämlich ein Tool zum fernsteuern von Konsolenprogrammen schreiben^^)
(
Hinweis zu den (un)gepufferten Streams:
startet man zum Beispiel ein pythonscript mit
so kann man das Programm so nicht steuern, dagegen bei dem Aufruf
schon (Mit dem Flag -i geht das auch, bloß dann bekommt man probleme beim Beenden);
Der Flag -u gibt Python nämlich an,
Auch folgender Code funzt leider nicht:
)
ich habe folgendes Problem:
In Java kann man mittels
Code:
java.lang.Process proc = Runtime.getRuntime().exec(*Kommando*);
Man kann sogar mittels:
Code:
java.io.InputStream in = proc.getInputStream();
Code:
java.io.OutputStream out = proc.getOutputStream();
Code:
while(in.available() > 0) *do something*
Code:
*init buffer*; .write(buffer);
Das ganze funktioniert allerdings nur solange, wie das Programm keinen ungepufferten Ausgabestream hat. Programme mit gepufferten Ausgabestreams können damit leider nicht gesteuert werden, obwohl ich das gerne tun würde.

(
Hinweis zu den (un)gepufferten Streams:
startet man zum Beispiel ein pythonscript mit
Code:
java.lang.Process proc = Runtime.getRuntime().exec("python test.py");
Code:
java.lang.Process proc = Runtime.getRuntime().exec("python -u test.py");
Der Flag -u gibt Python nämlich an,
Allerdings unterstützen nicht alle Programme einen derartigen Flag, daher die Frage.-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
see man page for details on internal buffering relating to '-u'
Auch folgender Code funzt leider nicht:
Code:
java.io.Reader xyz = new java.io.InputStreamReader(proc.getInputStream());
java.io.BufferedReader in = new java.io.BufferedReader(xyz);