有没有办法像Jul中的capture.output()一样捕获Julia中的stdout?

时间:2013-07-21 04:31:26

标签: r julia

在R中,capture.output()可以将表达式中的输出捕获到stdout作为字符向量,例如

> x = capture.output(print(1:10))
> x
[1] " [1]  1  2  3  4  5  6  7  8  9 10"

朱莉娅有同等的功能吗?

3 个答案:

答案 0 :(得分:5)

使用Julia 0.2,现在有一种捕获标准输出的方法:您可以调用redirect_stdoutSTDOUT转换为可以读取的管道。

这主要用于捕获外部C库的输出。正如Stefan所提到的,大多数Julia I / O函数接受一个io参数,允许您打印到任意目的地,例如字符串缓冲区。

答案 1 :(得分:4)

标准库函数应该都接受一个可选的IO类型的第一个参数,如果提供的话将打印到该参数,否则默认为STDOUT。在这种情况下,您可以使用sprint(io->f(io,...))来捕获打印到字符串的内容。如果函数没有写入打印到给定的IO对象,那么就没有办法重定向输出。

答案 2 :(得分:3)

不确定您的目标是什么,但如果您尝试将knitr带到julia,那就太棒了!

Gadfly包装有编织,可以做到这一点。

查看https://github.com/dcjones/Gadfly.jl/blob/master/src/weave.jl#L19

https://github.com/dcjones/Gadfly.jl/blob/master/src/weave.jl#L423

我一直在https://github.com/jverzani/Weave.jl中使用它来从降价处进行自我评分测验。