我正在为C / C ++库制作Julia包装器。我包装的C / C ++函数将写入标准输出。有没有一种方法可以从Julia端重定向这些消息,而无需在C / C ++代码中注释/删除写语句?
答案 0 :(得分:1)
您可以为此使用redirect_stdout
。
oldstd = stdout
redirect_stdout(somewhere_else)
ccall(:printf, Cint, (Cstring,), "Hello World!")
Base.Libc.flush_cstdio() # it might be necessary to flush C stdio to maintain the correct order of outputs or forcing a flush
redirect_stdout(oldstd) # recover original stdout
您可能想改用redirect_stdout(f::Function, stream)
方法。在这里,f
应该是不带参数的函数(例如,() -> do_something(...)
)。此方法自动将流恢复到stdout
。使用do
语法;
redirect_stdout(somewhere) do
ccall(:printf, Cint, (Cstring,), "Hello World!")
Base.Libc.flush_cstdio() # might be needed
end