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

Overview

ExCmd uses odu middleware to interact with external process. It uses a demand-driven protocol for IO to have back-pressure. ExCmd.stream! is a stream interface for interacting with the command. One should prefer to use this over ExCmd.Process. Use ExCmd.Process if you need more control.

Check documentation for information

Major advantages over port

Check out Exile which is an alternative solution based on NIF

Note: ExCmd is still WIP. Expect breaking changes

Installation

  1. Install odu v0.2.2 and make sure its in your path
  2. Install ExCmd
def deps do
[
{:ex_cmd, "~> x.x.x"}
]
end