This gem helps to spawn processes in a shell capturing output in realtime. It also allows to set the temeouts.
MRI 1.9.3 or 2.0.0.
Add this line to your application's Gemfile:
gem 'vx-common-spawn'
And then execute the bundler:
$ bundle
Or install it via gem
command:
$ gem install vx-common-spawn
The following snippet demonstrates the usage:
# Spawn system processes example
include Vx::Common::Spawn
spawn "ls -la" do |output|
print output
# prints directory listing
end
spawn({'ENV_VAR' => 'VALUE'}, "echo $VALUE", timeout: 10) do |output|
print output
# its print "VALUE\n"
end
# Spawn remote processes example
open_ssh('localhost', 'user') do |ssh|
ssh.spawn("ls -la") do |output|
print output
# prints directory listing
end
spawn({'ENV_VAR' => 'VALUE'}, "echo $VALUE", read_timeout: 10) do |output|
print output
# its print "VALUE\n"
end
end
When a timeout is reached spawn raises Vx::Common::Spawn::TimeoutError
or
Vx::Common::Spawn::ReadTimeoutError
. Both exceptions inherit
from Timeout::Error
Both spawn
methods return process exit code. If a process was terminated by a signal, for example
KILL or INT, the methods return negative number identical to a signal number (-9 for KILL, etc.)
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request