github.com/go-cmd/cmd (go): Package cmd runs external commands with concurrent access to output and status. It wraps the Go standard library os/exec.Command to correctly handle reading output (STDOUT and STDERR) while a command is running and killing a command. All operations are safe to call from multiple goroutines.  A basic example that runs env and prints its output:  Commands can be ran synchronously (blocking) or asynchronously (non-blocking):  Start returns a channel to which the final Status is sent when the command finishes for any reason. The first example blocks receiving on the channel. The second example is non-blocking because it saves the channel and receives on it later. Only one final status is sent to the channel; use Done for multiple goroutines to wait for the command to finish, then call Status to get the final status.
Keywords: asynchronous|command|golang|non-blocking|real-time