You can use open on a command and pass your own IO object for open to use as stdout. sprint() do io then collects everything written into io as a string.
julia> sprint() do out_stream
open(`cat`, "w", out_stream) do in_stream
println(in_stream, "Hello world!")
end
end
"Hello world!\n"