首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将输出从erlang shell重定向到文件中

将输出从erlang shell重定向到文件中
EN

Stack Overflow用户
提问于 2010-01-27 00:05:11
回答 4查看 4.3K关注 0票数 6

有没有办法将io:format()打印的数据从erlang shell重定向到文件中?我知道我可以打开一个文件(IoDevice)并将数据直接写入其中,但这需要更改代码,现在我不想这样做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-27 01:13:57

只需用erl -noinput -s module function -s init stop > file运行即可。

下面是一个例子。

Erlang代码:

代码语言:javascript
复制
-module(test).    
-compile(export_all).

function() ->
   io:fwrite("Hello world!~n").

在shell中:

代码语言:javascript
复制
$ erlc test.erl 
$ erl -noinput -s test function -s init stop > test.txt
$ cat test.txt
Hello world!
票数 10
EN

Stack Overflow用户

发布于 2010-01-27 05:09:28

当进程调用io:format()和类似函数时,该进程向其group_leader进程发送io请求消息。因此,一个简单的技巧是打开一个文件,并将其设置为生成输出的进程的group_leader。下面是将shell进程的输出重定向到文件的示例。

代码语言:javascript
复制
1> {ok, F} = file:open("z", [write]).
{ok,<0.36.0>}
2> group_leader(F, self()).
3> io:format("Where am I going to appear?~n").       
4>

这只会重定向当前的shell进程,因此您必须为要重定向到该文件的所有进程设置group_leader。

当然,该解决方案可以例如通过产生将io请求消息代理到轮换文件的服务器进程来改进,等等。

票数 14
EN

Stack Overflow用户

发布于 2010-01-27 04:34:05

您还可以使用io:fwrite/3的IODevice参数,当您不想将其定向到某个文件时,让它的atom值为standard_io。否则,将文件提供给它。

请参阅io module文档的“标准输入/输出”部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2140604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档