how do i read data from a unix command?

Luke Gorrie <>
Wed Nov 14 20:53:42 CET 2001


Garry Hodgson <> writes:

> is there a way i can read the output of a unix command using something
> akin to the file:read() functions?  i'd like to open a pipe and get back
> a file
> that i can do reads from.  something like:
> 
>     { ok, FP } = file:open( File, read )
> 	file:read( FP, ?BUFSIZE )
> 
> i know about os:cmd(), but that reads the whole thing at once, 
> and the files i'm reading are way too big for that.

Not exactly what you want, but you can use the spawn driver (see
'erlang' module docs for details). e.g.:

  7> open_port({spawn, "echo Hello, world"}, [eof]).
  #Port<0.10>
  8> flush().                                       
  Shell got {#Port<0.10>,{data,"Hello, world\n"}}
  Shell got {#Port<0.10>,eof}
  ok
  9> 

It will send you messages incrementally as output is generated, but as
far as I know you can only receive them async and there is no flow
control available. But this could be added to sys.c :-)

Cheers,
Luke




More information about the erlang-questions mailing list