Class PumpStreamHandler
java.lang.Object
org.apache.commons.exec.PumpStreamHandler
- All Implemented Interfaces:
ExecuteStreamHandler
Copies standard output and error of sub-processes to standard output and error of the parent process. If output or error stream are set to null, any feedback
from that stream will be lost.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate IOExceptionThe last exception being caught.private final OutputStreamError output stream.private ThreadError thread.private final InputStreamError input stream.private InputStreamPumperPumper input stream.private ThreadInput thread.private final OutputStreamOutput stream.private ThreadOutput thread.private static final DurationThree seconds timeout.private DurationThe timeout Duration the implementation waits when stopping the pumper threads.private final ThreadFactoryThe thread factory. -
Constructor Summary
ConstructorsModifierConstructorDescriptionConstructs a newPumpStreamHandler.PumpStreamHandler(OutputStream allOutputStream) Constructs a newPumpStreamHandler.PumpStreamHandler(OutputStream outputStream, OutputStream errorOutputStream) Constructs a newPumpStreamHandler.PumpStreamHandler(OutputStream outputStream, OutputStream errorOutputStream, InputStream inputStream) Constructs a newPumpStreamHandler.privatePumpStreamHandler(ThreadFactory threadFactory, OutputStream outputStream, OutputStream errorOutputStream, InputStream inputStream) Constructs a newPumpStreamHandler. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidCreate the pump to handle error output.protected voidCreate the pump to handle process output.protected ThreadcreatePump(InputStream is, OutputStream os) Creates a stream pumper to copy the given input stream to the given output stream.protected ThreadcreatePump(InputStream is, OutputStream os, boolean closeWhenExhausted) Creates a stream pumper to copy the given input stream to the given output stream.private ThreadCreates a stream pumper to copy the given input stream to the given output stream.protected OutputStreamgetErr()Gets the error stream.protected OutputStreamgetOut()Gets the output stream.(package private) DurationvoidSets theInputStreamfrom which to read the standard error of the process.voidSets theOutputStreamby means of which input can be sent to the process.voidSets theInputStreamfrom which to read the standard output of the process.voidsetStopTimeout(long timeout) Deprecated.voidsetStopTimeout(Duration timeout) Sets maximum time to wait until output streams are exhausted whenstop()was called.voidstart()Starts theThreads.private voidStarts the givenThread.voidstop()Stops pumping the streams.private voidStops a pumper thread.protected voidstopThread(Thread thread, long timeoutMillis) Stops a pumper thread.
-
Field Details
-
STOP_TIMEOUT_ADDITION
Three seconds timeout. -
outputThread
Output thread. -
errorThread
Error thread. -
inputThread
Input thread. -
outputStream
Output stream. -
errorOutputStream
Error output stream. -
inputStream
Error input stream. -
inputStreamPumper
Pumper input stream. -
stopTimeout
The timeout Duration the implementation waits when stopping the pumper threads. -
caught
The last exception being caught. -
threadFactory
The thread factory.
-
-
Constructor Details
-
PumpStreamHandler
public PumpStreamHandler()Constructs a newPumpStreamHandler. -
PumpStreamHandler
Constructs a newPumpStreamHandler.- Parameters:
allOutputStream- the output/errorOutputStream. TheOutputStreamimplementation must be thread-safe because the output and error reader threads will concurrently write to it.
-
PumpStreamHandler
Constructs a newPumpStreamHandler.If the same
OutputStreaminstance is used for output and error, then it must be thread-safe because the output and error reader threads will concurrently write to it.- Parameters:
outputStream- the outputOutputStream.errorOutputStream- the errorOutputStream.
-
PumpStreamHandler
public PumpStreamHandler(OutputStream outputStream, OutputStream errorOutputStream, InputStream inputStream) Constructs a newPumpStreamHandler.If the same
OutputStreaminstance is used for output and error, then it must be thread-safe because the output and error reader threads will concurrently write to it.- Parameters:
outputStream- the outputOutputStream.errorOutputStream- the errorOutputStream.inputStream- the inputInputStream.
-
PumpStreamHandler
private PumpStreamHandler(ThreadFactory threadFactory, OutputStream outputStream, OutputStream errorOutputStream, InputStream inputStream) Constructs a newPumpStreamHandler.If the same
OutputStreaminstance is used for output and error, then it must be thread-safe because the output and error reader threads will concurrently write to it.- Parameters:
outputStream- the outputOutputStream.errorOutputStream- the errorOutputStream.inputStream- the inputInputStream.
-
-
Method Details
-
createProcessErrorPump
Create the pump to handle error output.- Parameters:
is- theInputStream.os- theOutputStream.
-
createProcessOutputPump
Create the pump to handle process output.- Parameters:
is- theInputStream.os- theOutputStream.
-
createPump
Creates a stream pumper to copy the given input stream to the given output stream. When the 'os' is an PipedOutputStream we are closing 'os' afterward to avoid an IOException ("Write end dead").- Parameters:
is- the input stream to copy from.os- the output stream to copy into.- Returns:
- the stream pumper thread.
-
createPump
Creates a stream pumper to copy the given input stream to the given output stream.- Parameters:
is- the input stream to copy from.os- the output stream to copy into.closeWhenExhausted- close the output stream when the input stream is exhausted.- Returns:
- the stream pumper thread.
-
createSystemInPump
Creates a stream pumper to copy the given input stream to the given output stream.- Parameters:
is- the System.in input stream to copy from.os- the output stream to copy into.- Returns:
- the stream pumper thread.
-
getErr
-
getOut
-
getStopTimeout
Duration getStopTimeout() -
setProcessErrorStream
Sets theInputStreamfrom which to read the standard error of the process.- Specified by:
setProcessErrorStreamin interfaceExecuteStreamHandler- Parameters:
is- theInputStream.
-
setProcessInputStream
Sets theOutputStreamby means of which input can be sent to the process.- Specified by:
setProcessInputStreamin interfaceExecuteStreamHandler- Parameters:
os- theOutputStream.
-
setProcessOutputStream
Sets theInputStreamfrom which to read the standard output of the process.- Specified by:
setProcessOutputStreamin interfaceExecuteStreamHandler- Parameters:
is- theInputStream.
-
setStopTimeout
-
setStopTimeout
Deprecated.Sets maximum time to wait until output streams are exhausted whenstop()was called.- Parameters:
timeout- timeout in milliseconds or zero to wait forever (default).
-
start
-
start
-
stop
Stops pumping the streams. When a timeout is specified it is not guaranteed that the pumper threads are cleanly terminated.- Specified by:
stopin interfaceExecuteStreamHandler- Throws:
IOException- thrown when an I/O exception occurs.
-
stop
Stops a pumper thread. The implementation actually waits longer than specified in 'timeout' to detect if the timeout was indeed exceeded. If the timeout was exceeded an IOException is created to be thrown to the caller.- Parameters:
thread- the thread to be stopped.timeout- the time in ms to wait to join.
-
stopThread
Stops a pumper thread. The implementation actually waits longer than specified in 'timeout' to detect if the timeout was indeed exceeded. If the timeout was exceeded an IOException is created to be thrown to the caller.- Parameters:
thread- the thread to be stopped.timeoutMillis- the time in ms to wait to join.
-
setStopTimeout(Duration).