The Java Program: Execute.java
1 import java.io.*;
2
3 class Execute {
4
5 public static void main (final String args[]) {
6 String input = (args.length>1)?args[1]:"";
7 try {
8 final Process proc = Runtime.getRuntime().exec(args[0]);
9 final BufferedReader readConsole =
10 new BufferedReader (new InputStreamReader (proc.getInputStream()));
11 final BufferedReader errorConsole =
12 new BufferedReader (new InputStreamReader (proc.getErrorStream()));
13 final BufferedWriter writeConsole =
14 new BufferedWriter (new OutputStreamWriter(proc.getOutputStream()));
15
16 final WriterThread myWriterThread =
17 new WriterThread (new StringReader (input),writeConsole);
18 final ReaderThread myReaderThread = new ReaderThread (readConsole);
19 final ReaderThread myErrorReaderThread = new ReaderThread (errorConsole);
20
21 myWriterThread.join();
22 myReaderThread.join();
23 myErrorReaderThread.join();
24 final int ret = proc.waitFor();
25
26 System.out.println ("Standard input :\n" + input);
27 System.out.println ("Standard output:\n" + myReaderThread.output);
28 System.out.println ("Standard error :\n" + myErrorReaderThread.output);
29 System.out.println ("Return code = " + ret);
30
31 } catch (IOException e) {
32 e.printStackTrace (System.err);
33 } catch (InterruptedException e) {
34 e.printStackTrace (System.err);
35 }
36 }
37
38 static class ReaderThread extends Thread {
39 private final BufferedReader from;
40 public final StringBuffer output = new StringBuffer ();
41 ReaderThread (BufferedReader r) { from=r; start(); }
42 public void run() {
43 String line;
44 try {
45 while ((line = from.readLine()) != null) {
46 output.append(line+"\n");
47 }
48 from.close();
49 } catch (IOException e) {
50 e.printStackTrace();
51 }
52 }
53 }
54
55 static class WriterThread extends Thread {
56 private final BufferedReader from;
57 private final BufferedWriter to;
58 WriterThread (Reader r, BufferedWriter w) {
59 from=new BufferedReader(r); to=w; start();
60 }
61 public void run() {
62 String line;
63 try {
64 while ((line = from.readLine()) != null) {
65 to.write (line);
66 to.newLine();
67 }
68 from.close();
69 to.close();
70 } catch (IOException e) {
71 e.printStackTrace();
72 }
73 }
74 }
75
76
77 }