Erlang在没有提示的情况下从StdIn读取

时间:2018-05-12 14:28:11

标签: io erlang stdout stdin

我刚刚阅读了Erlang的IO模块,所有输入函数都以一个提示符()开始。

我有一个程序A,它将输出管道输出到我的Erlang程序B,因此将A stdout设为B stdin

我怎样才能在循环中读取stdIn, 因为我每隔Xms就得到一个msg。

我想要的是这样的

loop()->
  NewMsg = readStdIn() %% thats the function I am looking for
  do_something(NewMsg),
  loop.

1 个答案:

答案 0 :(得分:3)

  

我刚刚阅读了Erlang的IO模块,所有输入函数都以一个提示符()开始。

看起来您可以使用""作为提示。从stdin读取面向行的输入:

-module(my).
-compile(export_all).

read_stdin() ->
    case io:get_line("") of
        eof ->
            init:stop(); 
        Line ->
            io:format("Read from stdin: ~s", [Line]),
            read_stdin()
    end.

在bash shell中:

~/erlang_programs$ erl -compile my.erl
my.erl:2: Warning: export_all flag enabled - all functions will be exported

~/erlang_programs$ echo -e "hello\nworld" | erl -noshell -s my read_stdin
Read from stdin: hello
Read from stdin: world
~/erlang_programs$ 

请参阅Erlang How Do I...write a unix pipe program in Erlang