由于{{link1:@Przemyslaw Szufel}提供的出色答案,我们可以轻松地将stdio输出重定向到指定路径下的文件中。
我想知道是否有可能同时将stdio输出重定向到文件和继续在终端中打印它。这可能是一个很容易实现的功能,但我找不到它!而且显然不能运行代码两次 :)
我想知道是否有可能同时将stdio输出重定向到文件和继续在终端中打印它。这可能是一个很容易实现的功能,但我找不到它!而且显然不能运行代码两次 :)
redirect_stdio
的接口不接受抽象的 IO
作为其输出流,它要求它是一个具体的 Julia 类型 IOStream
。因此,似乎没有好的方法使用 redirect_stdio
通过流进行操作。redirect_stdio
接受套接字和命名管道,这是一种您可以考虑的方式(对于这个简单的任务来说有点复杂,也许有人会找到更优雅的解决方案)。\\.\pipe\
):using Sockets
srv = Sockets.listen(raw"\\.\pipe\TeePipe")
mystdout = stdout
@async begin
open("log.txt", "w") do f
sock = accept(srv)
while !eof(sock)
line = readline(sock)
println(mystdout, line)
flush(mystdout)
println(f, line)
flush(f)
end
end
end
teelogger = Sockets.connect(raw"\\.\pipe\TeePipe")
julia> redirect_stdio(stdout=teelogger) do
println("Line1")
println("Line2")
@show 3+4
end
Line1
Line2
3 + 4 = 7
7
shell> more log.txt
Line1
Line2
3 + 4 = 7
redirect_stdio
不接受IO
抽象类型 :( - Przemyslaw Szufel