postfix-api/src/main/java/de/gurkengewuerz/postfix_rest_send/utils/BashUtils.java

72 lines
2.6 KiB
Java

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<String> output = new ArrayList<>();
ArrayList<String> 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"});
}
}