ExCmd Hex.pm

ExCmd is an Elixir library to run and communicate with external programs with back-pressure.

ExCmd is built around the idea of streaming data through an external program. Think streaming a video through ffmpeg to serve a web request. For example, getting audio out of a stream is as simple as

ExCmd.stream!(~w(ffmpeg -i pipe:0 -f mp3 pipe:1), input: File.stream!("music_video.mkv", [], 65336))
|> Stream.into(File.stream!("music.mp3"))
|> Stream.run()

Major advantages over port

Refer documentation for information

Check out Exile which is an alternative solution based on NIF without middleware overhead

Installation

def deps do
  [
    {:ex_cmd, "~> x.x.x"}
  ]
end