/* * ShellCommandExecuter.java * * Created on January 28, 2003, 1:40 PM */ package org.dcache.srm.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.util.StringTokenizer; /** * * @author timur */ public class ShellCommandExecuter implements Runnable { public static int execute(String command) { return execute(command,new PrintWriter(System.out),new PrintWriter(System.err)); } public static int execute(String command,Writer out, Writer error) { //System.out.println("execute("+command+")"); Process proc; InputStream StdErr; InputStream StdOut; try { proc = Runtime.getRuntime().exec(command); StdErr = proc.getErrorStream(); StdOut = proc.getInputStream(); } catch(IOException ioe) { ioe.printStackTrace(); return 1; } BufferedReader OutReader = new BufferedReader(new InputStreamReader(StdOut)); new ShellCommandExecuter(OutReader,out); BufferedReader ErrReader = new BufferedReader(new InputStreamReader(StdErr)); new ShellCommandExecuter(ErrReader,error); int exit_value=1; try { exit_value = proc.waitFor(); } catch(InterruptedException ie) { } //System.out.println(" exit value is "+ exit_value); return exit_value; } public static int execute(String [] command,Writer out, Writer error) { //System.out.println("execute("+command+")"); Process proc; InputStream StdErr; InputStream StdOut; try { proc = Runtime.getRuntime().exec(command); StdErr = proc.getErrorStream(); StdOut = proc.getInputStream(); } catch(IOException ioe) { ioe.printStackTrace(); return 1; } BufferedReader OutReader = new BufferedReader(new InputStreamReader(StdOut)); new ShellCommandExecuter(OutReader,out); BufferedReader ErrReader = new BufferedReader(new InputStreamReader(StdErr)); new ShellCommandExecuter(ErrReader,error); int exit_value=1; try { exit_value = proc.waitFor(); } catch(InterruptedException ie) { } //System.out.println(" exit value is "+ exit_value); return exit_value; } public static String[] executeAndReturnOutput(String command) { //System.out.println("executeAndReturnOutput("+command+")"); Process proc; InputStream StdErr; InputStream StdOut; try { proc = Runtime.getRuntime().exec(command); StdErr = proc.getErrorStream(); StdOut = proc.getInputStream(); } catch(IOException ioe) { ioe.printStackTrace(); return null; } StringWriter string_writer = new StringWriter(); BufferedReader OutReader = new BufferedReader(new InputStreamReader(StdOut)); new ShellCommandExecuter(OutReader,string_writer); BufferedReader ErrReader = new BufferedReader(new InputStreamReader(StdErr)); new ShellCommandExecuter(ErrReader,new PrintWriter(System.err)); try { proc.waitFor(); } catch(InterruptedException ie) { } //System.out.println(" exit value is "+ exit_value); StringTokenizer tokenizer = new StringTokenizer(string_writer.getBuffer().toString()); int len = tokenizer.countTokens(); String result[] = new String[len]; for(int i =0; i<len;++i) { result[i] = tokenizer.nextToken(); } return result; } final BufferedReader reader; BufferedReader ErrReader; boolean error; private final Writer out; private ShellCommandExecuter(BufferedReader reader,Writer out) { this.reader = reader; this.out = out; new Thread(this).start(); } @Override public void run() { try { String line; while((line = reader.readLine()) != null) { out.write(line); out.write('\n'); out.flush(); } } catch(IOException e) { e.printStackTrace(); } } }