Skip to content

Instantly share code, notes, and snippets.

@felipenoris
Last active January 26, 2023 18:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felipenoris/9a83224833d7da461d913e75784d8f9f to your computer and use it in GitHub Desktop.
Save felipenoris/9a83224833d7da461d913e75784d8f9f to your computer and use it in GitHub Desktop.
run_pipeline_redirect_output
# https://discourse.julialang.org/t/iobuffer-becomes-not-writable-after-run/92323
function run_pipeline_redirect_output(cmd::Cmd; stdout::IO=stdout, stderr::IO=stderr)
@assert iswritable(stdout) && iswritable(stderr)
tmp_stdout = isa(stdout, IOBuffer) ? IOBuffer() : stdout
tmp_stderr = isa(stderr, IOBuffer) ? IOBuffer() : stderr
local ret
try
ret = run(pipeline(cmd, stdout=tmp_stdout, stderr=tmp_stderr))
catch err
if isa(stdout, IOBuffer)
write(stdout, take!(tmp_stdout))
end
if isa(stderr, IOBuffer)
write(stderr, take!(tmp_stderr))
end
rethrow()
end
if isa(stdout, IOBuffer)
write(stdout, take!(tmp_stdout))
end
if isa(stderr, IOBuffer)
write(stderr, take!(tmp_stderr))
end
@assert iswritable(stdout) && iswritable(stderr)
return ret
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment