Документация для redirect_stdout
в версии 1.1.0, которую я сейчас использую, похоже, не дает пример того, как использовать эту функцию.Может быть, я пропустил это?
Я хочу захватить вывод println
и вернуть его обратно в виде строки.
Вот пример:
julia> VERSION
v"1.1.0"
julia> (rd, wr) = redirect_stdout();
julia> println("This is a test.")
julia> # Get back the string "This is a test."
julia> # s = do_something_with_rd(rd)
julia> # s == "This is a test."
julia> # true
Любойпредложения?
Редактировать
Основываясь на принятом ответе ниже, вот полное решение моего вопроса:
julia> original_stdout = stdout;
julia> (rd, wr) = redirect_stdout();
julia> println("This is a test.")
julia> s = readline(rd)
"This is a test."
julia> s == "This is a test."
true
julia> redirect_stdout(original_stdout);
julia> println("Test of orig. stdout.")
Test of orig. stdout.
Редактировать2: Более полный пример
Ниже приведен пример тестирования множества выходов функций print
и println
с использованием перенаправления stdout
.Спасибо @ Bogumił Kamiński за его ответ и редактирование, которые сделали это более ясным для меня:
using Test
# Test redirect_stdout.
@testset "Example tests using redirect_stdout" begin
original_stdout = stdout;
(read_pipe, write_pipe) = redirect_stdout();
print("Using print function.")
println("Using println function.")
println("Second use of println function.")
println("Line 1.\nLine 2.\nLine 3.\nEND")
println("""
This is new line 1.
This is new line 2. Next a Char = """)
print('A')
redirect_stdout(original_stdout);
close(write_pipe)
@test readline(read_pipe) == "Using print function.Using println function."
@test readline(read_pipe) == "Second use of println function."
@test read(read_pipe, String) == "Line 1.\nLine 2.\nLine 3.\nEND\n" *
"This is new line 1.\nThis is new line 2. Next a Char = \nA"
end
# Suppress unnecessary output when this file.
return nothing
Вот вывод:
julia> include("test_redirect_stdout.jl")
Test Summary: | Pass Total
Example tests using redirect_stdout | 3 3