how do i read data from a unix command?

Luke Gorrie luke@REDACTED
Wed Nov 14 20:53:42 CET 2001

Garry Hodgson <garry@REDACTED> 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]).
  8> flush().                                       
  Shell got {#Port<0.10>,{data,"Hello, world\n"}}
  Shell got {#Port<0.10>,eof}

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


More information about the erlang-questions mailing list