在Erlang中,如何独立捕获子进程的stdout和stderr?

时间:2016-01-21 19:40:07

标签: erlang

我试图弄清楚如何从Erlang中的系统子进程中提取stdout和stderr。 (不要与Erlang进程混淆。)问题是我试图独立地提取流的输出。

open_port / 2似乎让我大部分都在那里,但它似乎没有提供区分两个流的方法。有stderr_to_stdout选项,但这不是我想要的;我想从两个数据流中获取数据,但能够区分这两个流。

有什么建议吗?感谢。

更新:我理想地寻找可在Windows和Linux上运行的解决方案。

2 个答案:

答案 0 :(得分:0)

您可以尝试erlexec。正如its documentation所解释的那样,它允许对stdout和stderr进行单独控制,并且通常它比open_port/2更灵活,可以从Erlang管理OS进程。

答案 1 :(得分:0)

试试这个:

Path = filename:join(["./priv", "log", "log_file_name"]),
{ok, F} = file:open(Path, [write]),
group_leader(F, self()),
erlang:display("Anything this process outputs now gets redirected").