Divert out/err streams while command runs

Actually System.in works fine, it's the output streams that get buffered.
We can fix it by diverting them for the duration of the command.

Fixes gh-217
pull/234/head
Dave Syer 11 years ago
parent 6b6bd37924
commit 57ba6a40b6

@ -159,7 +159,7 @@ public class ShellCommand extends AbstractCommand {
launchProcess(args, systemOut, systemErr);
}
else {
runCommand(args);
runCommand(args, systemOut, systemErr);
}
}
}
@ -238,10 +238,21 @@ public class ShellCommand extends AbstractCommand {
ReflectionUtils.invokeMethod(PROCESS_BUILDER_INHERIT_IO_METHOD, processBuilder);
}
private void runCommand(List<String> args) {
private void runCommand(List<String> args, PrintStream systemOut,
PrintStream systemErr) {
if (!getName().equals(args.get(0))) {
PrintStream out = System.out;
PrintStream err = System.err;
System.setOut(systemOut);
System.setErr(systemErr);
try {
this.springCli.runAndHandleErrors(args.toArray(new String[args.size()]));
}
finally {
System.setOut(out);
System.setErr(err);
}
}
}
public void pushPrompt(String prompt) {

Loading…
Cancel
Save