Stream output while subprocess is running #43
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR reimplements
Bkt::execute_subprocess()
and its callers to support streaming the subprocess' output while it's running, rather than blocking silently until the subprocess finishes.As suggested in https://stackoverflow.com/q/66060139 the child process' streams are processed in background threads responsible for both persisting and streaming the output to the caller's stdout/stderr.
Scoped threads are used to support streaming to references such as
&mut Vec<u8>
and to loosen the type requirements of the stream (namely to not require that they are 'static).CLI:
Library:
Bkt::retrieve_streaming
andBkt::refresh_streaming
methods which accept out/err sinks. The subprocess' output is written to these streams in addition to being cached and available in the returnedInvocation
.Bkt::retrieve
/Bkt::refresh
behave as previously, i.e. they do not support streaming.Fixes #31