开发者

How to know when user redirect output from erlang shell into a file

I have an sample module

    -module(helloworld).
    -compile(export_all).

    main() -> io:format("~s~s~s~n",["\e[31m","Hello world!","\e[0m"]).

When I build:

erlc helloworld.erl

After that, I run:

erl -noshell -s helloworld main -s init stop
Hello world! (with red color)
 
erl -noshell -s helloworld main -s init stop > text.txt
^[[31mHello world!^[[0m (The content in text.txt is ugly, so I don't like).

My problem is:

  1. How to know when user redirect output from er开发者_开发技巧lang shell into a file?
  2. How can I write to text.txt the content just "Hello world!" not "^[[31mHello world!^[[0m"

Thanks.


Have a look to http://www.erlang.org/doc/man/init.html#get_arguments-0, you can check for the existence of "noshell" flag there an adopt output accordingly.

[{root,["/opt/local/lib/erlang"]},{progname,["erl"]},{home,["/Users/..."]},{noshell,[]}]]},{helloworld,main,0},{init,start_it,1},{init,start_em,1}]


I'm using io:rows/0 that returns {ok, Number} if it is a terminal or {error, enotsup} if it is not. More information here.


Thanks, but I don't think that can solve my problem. I use isatty in C library and solved it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜