I'm using a ProcessBuilder to execute commands and redirect the output. I now want to add the possibility to have no output at all.
Of course I could redirect into a file, but this would leave unnecessary files on the users system.
I am looking for a solution that
The only way I could find was this:
ProcessBuilder processBuilder = new ProcessBuilder(command);
if (suppressOutput) {
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}
But that prints to the underlying shell, which is not literally "no output".
Here is my use of processBuilder with output not surpressed:
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(new File(workingdir));
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
while (process.isAlive()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) { }
// check for termination request
if (terminationRequest()) {
process.destroy();
return -1;
}
}
return process.exitValue();
The DISCARD
redirect option has been added in Java 9. You could use that if you upgrade Java. Otherwise, you could simply replicate that behaviour because the DISCARD
redirect enum uses a file instance which redirects to null device as below.
private static File NULL_FILE = new File(
(System.getProperty("os.name")
.startsWith("Windows") ? "NUL" : "/dev/null")
);
Then you could use the overloaded redirectOutput
method;
if (suppressOutput) {
processBuilder.redirectOutput(NULL_FILE);
}
This is identical to Java 9's behaviour.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With