1 package org.paneris.util; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import java.io.InputStream; 6 7 /** 8 * This class contains a number of static functions to run 9 * commands in new processes 10 */ 11 12 public class SystemUtils { 13 14 /** 15 * Execute a system command and return its ouput in a String. 16 * <P> 17 * It works by forking a separate process and capturing it's 18 * output stream (which is a java.lang.io.InputStream!) 19 * <P> 20 * Note that at present we ignore any InterruptedException 21 * which might get thrown whilst we are waiting for the process 22 * to terminate 23 * 24 * @param cmd System command to execute 25 * @return the command's output 26 * @exception IOException if there is a problem reading from 27 * the process' output stream 28 * @see java.io.InputStream 29 * @see java.lang.Process 30 */ 31 public static String exec(String cmd) throws IOException { 32 33 // Run the command 34 Process proc = Runtime.getRuntime().exec(cmd); 35 36 // Copy output of cmd to a StringBuffer 37 StringBuffer output = new StringBuffer(); 38 InputStream proc_output = proc.getInputStream(); 39 int b=0; 40 while( (b=proc_output.read()) >= 0 ) { 41 output.append((char)b); 42 } 43 44 // Clean up the process 45 try { 46 proc.waitFor(); 47 } catch (InterruptedException interupt) { 48 // Another thread has interrupted our waiting 49 // Should we do anything? 50 } 51 proc.destroy(); 52 53 return new String(output); 54 } 55 56 57 /** 58 * Write a command to a script and then execute that script. This can be 59 * used, for instance, to change the working directory before calling 60 * a command by using something like cmd = "#/bin/sh \n\n cd /some/where; ls" 61 * <P> 62 * If the script is not executable then this will fail silently. IT IS 63 * UP TO YOU TO MAKE THE FILE EXECUTABLE ON YOUR SYSTEM. YOU MUST ALSO MAKE 64 * THE CMD AN APPROPRIATE SCRIPT 65 * <P> 66 * TODO - can we chmod in Java? 67 * <P> 68 * @param script text of a script to execute 69 * @param scriptName the filename to write the script to. The file should 70 * be executable (you might want to create it before hand 71 * and change permissions outside of java) 72 * @return output of the script 73 * @exception IOException if there is a problem reading from 74 * the script's output stream 75 * 76 */ 77 public static String execAsScript(String script, String scriptName) throws IOException { 78 FileWriter scriptWriter = new FileWriter(scriptName); 79 scriptWriter.write(script,0,script.length()); 80 scriptWriter.close(); 81 return exec(scriptName); 82 } 83 84 }