diff --git a/brut.j.util/src/main/java/brut/util/OS.java b/brut.j.util/src/main/java/brut/util/OS.java index 97398633..805f93e5 100644 --- a/brut.j.util/src/main/java/brut/util/OS.java +++ b/brut.j.util/src/main/java/brut/util/OS.java @@ -19,6 +19,8 @@ package brut.util; import brut.common.BrutException; import java.io.*; import java.util.Arrays; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.logging.Logger; import org.apache.commons.io.IOUtils; @@ -100,6 +102,23 @@ public class OS { } } + public static String execAndReturn(String[] cmd) { + ExecutorService executor = Executors.newCachedThreadPool(); + try { + ProcessBuilder builder = new ProcessBuilder(cmd); + builder.redirectErrorStream(true); + + Process process = builder.start(); + StreamCollector collector = new StreamCollector(process.getInputStream()); + executor.execute(collector); + + process.waitFor(); + return collector.get(); + } catch (IOException | InterruptedException e) { + return null; + } + } + public static File createTempDirectory() throws BrutException { try { File tmp = File.createTempFile("BRUT", null); @@ -142,4 +161,37 @@ public class OS { private final InputStream mIn; private final String mType; } + + static class StreamCollector implements Runnable { + private final StringBuffer buffer = new StringBuffer(); + private final InputStream inputStream; + + public StreamCollector(InputStream inputStream) { + super(); + this.inputStream = inputStream; + } + + @Override + public void run() { + BufferedReader reader = null; + String line; + try { + reader = new BufferedReader(new InputStreamReader(inputStream)); + while ((line = reader.readLine()) != null) { + buffer.append(line).append('\n'); + } + } catch (Exception e) { + System.err.println(e); + } finally { + try { + reader.close(); + } catch (IOException e) {} + } + + } + + public String get() { + return buffer.toString(); + } + } }