如何在Julia中使用自定义回调制作`Pipe`或`TTY`?

时间:2015-09-18 02:44:23

标签: julia

我想通过将Julia的STDINSTDOUTSTDERR连接到MATLAB终端来想象我将Julia嵌入到MATLAB mex函数中。 redirect_std[in|out|err]的文档说我作为参数传递的流需要是TTYPipe(或TcpSocket,这似乎不会申请)。

我知道如何为每个流定义正确的回调(基本上,围绕调用MATLAB的inputfprintf的包装器),但我不确定如何构造所需的流。< / p>

1 个答案:

答案 0 :(得分:1)

Pipe在https://github.com/JuliaLang/julia/pull/12739中重命名为PipeEndpoint,但相应的文档未更新,PipeEndpoint现在被视为内部。即便如此,预先创建管道仍然可行:

pipe = Pipe()
Base.link_pipe(pipe)
redirect_stdout(pipe.in)
@async while !eof(pipe)
    data = readavailable(pipe)
    # Pass data to whatever function handles display here
end

此外,这些函数的无参数版本已经创建了一个管道对象,因此推荐的方法是:

(rd,wr) = redirect_stdout()
@async while !eof(rd)
    data = readavailable(rd)
    # Pass data to whatever function handles display here
end

尽管如此,所有这些都不太清楚,所以我创建了一个拉取请求来清理这个API:https://github.com/JuliaLang/julia/pull/18253。合并拉取请求后,link_pipe调用将变得不必要,pipe可以直接传递到redirect_stdout。此外,无争论版本的返回值将成为常规Pipe