如何知道用户何时将erlang shell的输出重定向到文件中

时间:2010-06-22 04:49:21

标签: erlang

我有一个示例模块

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

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

当我建立时:

erlc helloworld.erl

之后,我跑:

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).

我的问题是:

  1. 如何知道用户何时将erlang shell的输出重定向到文件中?
  2. 如何写入text.txt内容只是“Hello world!”不是“^ [[31mHello world!^ [[0m”
  3. 感谢。

3 个答案:

答案 0 :(得分:0)

看看http://www.erlang.org/doc/man/init.html#get_arguments-0,你可以检查是否存在“noshell”标志,并相应地采用输出。

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

答案 1 :(得分:0)

我正在使用io:rows/0如果是终端则返回{ok, Number},如果不是,则返回{error, enotsup}。更多信息here

答案 2 :(得分:-2)

谢谢,但我不认为这可以解决我的问题。 我在C库中使用isatty并解决了它。