Как узнать, когда пользователь перенаправляет вывод из оболочки erlang в файл - PullRequest
3 голосов
/ 22 июня 2010

У меня есть образец модуля

    -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 в файл?
  2. Как мне написать в text.txt содержимое просто "Hello world!" не "^ [[31mHello world! ^ [[0m"

Спасибо.

Ответы [ 3 ]

0 голосов
/ 23 июня 2010

Спасибо, но я не думаю, что это решит мою проблему.Я использую isatty в библиотеке C и решил это.

0 голосов
/ 08 апреля 2018

Я использую io:rows/0, который возвращает {ok, Number}, если это терминал, или {error, enotsup}, если это не так.Больше информации здесь .

0 голосов
/ 22 июня 2010

Посмотрите на 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}]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...