/
Forside
/
Teknologi
/
Udvikling
/
Java
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
Java
#
Navn
Point
1
molokyle
3688
2
Klaudi
855
3
strarup
740
4
Forvirret
660
5
gøgeungen
500
6
Teil
373
7
Stouenberg
360
8
vnc
360
9
pmbruun
341
10
mccracken
320
Eksternt program, STDIO & STDIN
Fra :
WinstonSmith_101@hot~
Dato :
17-10-06 18:04
Jeg har et eksternt program jeg skal eksekvere, som tager et argument.
Så jeg har denne kode:
String command = "...";
String argument = "...";
process = Runtime.getRuntime().exec(command);
Og for at sende argumenterne:
java.io.OutputStream out = process.getOutputStream();
out.write(argument.getBytes());
out.close();
Og for at læse fra output fra det eksterne program:
java.io.InputStream in = process.getInputStream();
int c;
while ((c = in.read()) != -1) {
System.out.print("OUT: " + (char)c);
}
in.close();
= = = = = = = = = = = = = = = = = =
Men problemet er at output fra det eksterne program ikke bliver læst.
Det bliver stadig sendt til stdio når input-strømmen bliver lukket
(in.close();) - men altså ikke af min kode.
Er der ikke en måde at eksekvere et eksternt program og samtidigt
både sende argumenter til det og fange dets output? Hver for sig
fungere de godt. Hvis det eksterne program ikke forventer input og jeg
ikke åbner OutputStream så opfanger c=read() outputtet fra det
eksterne program?
Kim Jersin (
18-10-2006
)
Kommentar
Fra :
Kim Jersin
Dato :
18-10-06 09:07
Kommunikationen med det eksterne program er asynkron. Så du bliver nødt
til at starte en ekstra tråd. Typisk bruger man en hjælpetråd til at
sende data til programmet, mens ens egen hovedtråd læser.
I din kode nedenfor har jeg antydet hvad du skal gøre!
Du bliver nok nødt til at lave noget fejlhåndtering i trådens run()
metode, men det skal compileren nok belære dig om....
En anden ting du skal være opmærksom på er at det eksterne program også
kan sende sit output til stderr, så det kan være at det er
getErrorStream() som du skal anvende. Hvis programmet har output på
begge - jeps, så skal der gang i endnu en tråd!!!
Hvis du bruger java version 1.5 (5.0) el. nyere, så bør du kigge på
ProcessBuilder klassen. Bla. er det muligt at sætte et flag så man kan
få sammensmeltet stdout og stderr til en strøm (og derved undgå 2 tråde
til at læse).
/Kim
WinstonSmith_101@hotmail.com skrev:
> Jeg har et eksternt program jeg skal eksekvere, som tager et argument.
> Så jeg har denne kode:
>
> String command = "...";
// Denne bliver nødt til at være erklæret final
final String argument = "..."
> String argument = "...";
> process = Runtime.getRuntime().exec(command);
>
> Og for at sende argumenterne:
>
Thread tt = new Thread {
public void run() {
> java.io.OutputStream out = process.getOutputStream();
> out.write(argument.getBytes());
> out.close();
}
};
tt.start();
>
> Og for at læse fra output fra det eksterne program:
>
> java.io.InputStream in = process.getInputStream();
> int c;
> while ((c = in.read()) != -1) {
> System.out.print("OUT: " + (char)c);
> }
> in.close();
>
> = = = = = = = = = = = = = = = = = =
>
> Men problemet er at output fra det eksterne program ikke bliver læst.
> Det bliver stadig sendt til stdio når input-strømmen bliver lukket
> (in.close();) - men altså ikke af min kode.
>
> Er der ikke en måde at eksekvere et eksternt program og samtidigt
> både sende argumenter til det og fange dets output? Hver for sig
> fungere de godt. Hvis det eksterne program ikke forventer input og jeg
> ikke åbner OutputStream så opfanger c=read() outputtet fra det
> eksterne program?
>
Søg
Alle emner
Teknologi
Udvikling
Java
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408914
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.