72 lines
2.6 KiB
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"});
|
|
}
|
|
}
|