package de.gurkengewuerz.postfix_rest_send.utils; import de.gurkengewuerz.postfix_rest_send.objects.ReturnHolder; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; /** * Created by gurkengewuerz.de on 13.07.2017. */ public class BashUtils { public static ReturnHolder run(boolean directPrint, String... command) { try { ProcessBuilder pb = new ProcessBuilder(command); Process p = pb.start(); return getOutput(directPrint, p); } catch (IOException ex) { Logger.getLogger(BashUtils.class.getName()).log(Level.SEVERE, "error executing command", ex); } return new ReturnHolder(new String[0], new String[]{"exception"}); } private static ReturnHolder getOutput(boolean print, Process P) { try { BufferedReader stdInput = new BufferedReader(new InputStreamReader(P.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(P.getErrorStream())); ArrayList output = new ArrayList<>(); ArrayList error = new ArrayList<>(); Thread t = null; if (print) { t = new Thread(() -> { String s; try { while ((s = stdError.readLine()) != null) { error.add(s); System.out.println("ERR: " + s); } } catch (IOException ex) { Logger.getLogger(BashUtils.class.getName()).log(Level.SEVERE, null, ex); } }); } String s; while ((s = stdInput.readLine()) != null) { output.add(s); if (print) { System.out.println("OUT: " + s); } } if (t != null) { if (t.isAlive()) { t.stop(); } } while ((s = stdError.readLine()) != null) { error.add(s); if (print) { System.out.println("ERR: " + s); } } return new ReturnHolder(output.toArray(new String[output.size()]), error.toArray(new String[error.size()])); } catch (IOException ex) { Logger.getLogger(BashUtils.class.getName()).log(Level.SEVERE, null, ex); } return new ReturnHolder(new String[0], new String[]{"exception"}); } }