[erlang-questions] Running multiple commands like os:cmd/1
Gleb Peregud
gleber.p@REDACTED
Wed Dec 26 21:37:19 CET 2012
Happy holidays, everyone!
I want to run multiple commands in a single shell from my code through
some sort of open_port({spawn, ...}). I have four requirements:
1) I want it to work asynchronously (i.e. I start a command and I get
it's results streamed to a process as it happens);
2) I want to know exactly when a command finishes;
3) Binary output should be handled properly;
4) Changes in env variables should be preserved between commands.
A naive sequence of os:cmd/1 or open_port({spawn, ...}) doesn't
satisfy requirement 4.
os:cmd/1 has a nice backend code in there, but it doesn't satisfy
requirement 3. It has a bug. Try running length(os:cmd("head -c 1000
/dev/urandom")).
open_port({spawn, "/bin/sh -s -"}, [line]) with port_command/2 doesn't
satisfy requirement 2.
Any ideas how to implement it? Is there any library which does it?
Cheers,
Gleb
More information about the erlang-questions
mailing list