有沒有辦法將erlang shell中由io:format()
打印的數據重定向到文件中?我知道我可以打開一個文件(IoDevice)並直接將數據寫入它,但它需要更改代碼,我現在不想這樣做。將來自erlang shell的輸出重定向到文件
5
A
回答
8
只需運行它erl -noinput -s module function -s init stop > file
。
下面是一個例子。
二郎代碼:
-module(test).
-compile(export_all).
function() ->
io:fwrite("Hello world!~n").
在外殼:
$ erlc test.erl
$ erl -noinput -s test function -s init stop > test.txt
$ cat test.txt
Hello world!
2
您還可以使用IODevice參數IO:使用fwrite/3,讓它具有原子值standard_io當你不不想讓它指向某個文件。否則給它的文件。
請參閱io module文檔的「標準輸入/輸出」部分。
11
當一個進程調用io:format()
和類似的函數時,進程發送IO請求消息到它的group_leader進程。所以簡單的破解就是打開一個文件,並將其設置爲生成輸出的進程的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>
這隻會重定向當前的shell程序,所以你必須設置爲group_leader您想重定向到文件中的所有進程。
該解決方案可以通過生成一個服務器進程,其代理的IO請求消息輪換文件細化過程,例如,等
1
您可以用解析變換重新編譯代碼,轉換調用像
io:format("~p~n", "Hello world!")
到像
io:format(whereis(my_output_file), "~p~n", "Hello world!")
呼叫另外,您需要添加到您的啓動代碼這一點,就大功告成了:
{ok, F} = file:open("file", [write]),
register(my_output_file, F),
相關問題
- 1. 將sql輸出重定向到shell腳本中的文件
- 2. 將shell腳本的輸出重定向到一個文件
- 3. 將輸出從shell腳本重定向到文件
- 4. 將shell輸出重定向到一個文件
- 5. 將ttisql輸出重定向到文件
- 6. 將execlp輸出重定向到文件
- 7. Ruby將輸出重定向到文件
- 8. 將lldb輸出重定向到文件
- 9. 將w輸出重定向到文件
- 10. 將ostream重定向到輸出文件
- 11. 重定向輸出到輸出文件
- 12. 標準輸出重定向到文件
- 13. 重定向grep的輸出到文件
- 14. iostat的重定向輸出到文件
- 15. 將輸入和輸出重定向到一個shell中
- 16. 重定向vim:使輸出到文件
- 17. 如果文件存在,輸出在shell中重定向到另一個文件
- 18. 輸出重定向到文件
- 19. 重定向輸出到文件
- 20. 重定向輸出到文件
- 21. 將多重輸出重定向到perl中的文件句柄
- 22. 重定向mongo shell的錯誤輸出
- 23. 將shell的輸出重定向/存儲到GDB變量中?
- 24. 將stderr重定向到c shell中的標準輸出
- 25. 輸出重定向到多個文件
- 26. 重定向來自可執行文件的輸出,但不是所有的輸出都被重定向?
- 27. 將輸出重定向到一個可變定義的文件
- 28. 將輸出重定向到由VAR指定的文件名
- 29. 將文件重定向到標準輸出 - 反向io重定向
- 30. 將輸出重定向到MongoDB中的文本文件
不錯的破解!可能相當有幫助 – gleber 2010-01-26 21:18:20