有没有办法将io:format()erlang shell 打印的数据重定向到文件中?我知道我可以打开一个文件(IoDevice)并直接将数据写入其中,但它需要更改代码,我现在不想这样做.
Zed*_*Zed 13
当进程调用io:format()和类似的函数时,该进程将io请求消息发送到其group_leader进程.所以一个简单的hack是打开一个文件,并将其设置为产生输出的进程的group_leader.以下是将shell进程的输出重定向到文件的示例.
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>
Run Code Online (Sandbox Code Playgroud)
这只会重定向当前的shell进程,因此您必须为要重定向到该文件的所有进程设置group_leader.
当然可以改进解决方案,例如通过生成代理请求消息到旋转文件的服务器进程等.
只需运行它erl -noinput -s module function -s init stop > file.
这是一个例子.
Erlang代码:
-module(test).
-compile(export_all).
function() ->
io:fwrite("Hello world!~n").
Run Code Online (Sandbox Code Playgroud)
在shell中:
$ erlc test.erl
$ erl -noinput -s test function -s init stop > test.txt
$ cat test.txt
Hello world!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3803 次 |
| 最近记录: |