X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=lib%2Fmcollective%2Fvendor%2Fsystemu%2FREADME;fp=lib%2Fmcollective%2Fvendor%2Fsystemu%2FREADME;h=978f24f040afb2f0bb81946cb25fa26128270dc6;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/lib/mcollective/vendor/systemu/README b/lib/mcollective/vendor/systemu/README new file mode 100644 index 0000000..978f24f --- /dev/null +++ b/lib/mcollective/vendor/systemu/README @@ -0,0 +1,170 @@ +NAME + + systemu + +SYNOPSIS + + universal capture of stdout and stderr and handling of child process pid for + windows, *nix, etc. + +URIS + + http://github.com/ahoward/systemu + http://rubyforge.org/projects/codeforpeople/ + +INSTALL + + gem install systemu + +HISTORY + 2.0.0 + - versioning issue. new gem release. + + 1.3.1 + - updates for ruby 1.9.1 + + 1.3.0 + - move to github + + 1.2.0 + + - fixed handling of background thread management - needed + Thread.current.abort_on_exception = true + + - fixed reporting of child pid, it was reported as the parent's pid before + +SAMPLES + + + <========< samples/a.rb >========> + + ~ > cat samples/a.rb + + # + # systemu can be used on any platform to return status, stdout, and stderr of + # any command. unlike other methods like open3/popen4 there is zero danger of + # full pipes or threading issues hanging your process or subprocess. + # + require 'systemu' + + date = %q( ruby -e" t = Time.now; STDOUT.puts t; STDERR.puts t " ) + + status, stdout, stderr = systemu date + p [ status, stdout, stderr ] + + ~ > ruby samples/a.rb + + [#, "2011-12-11 22:07:30 -0700\n", "2011-12-11 22:07:30 -0700\n"] + + + <========< samples/b.rb >========> + + ~ > cat samples/b.rb + + # + # quite a few keys can be passed to the command to alter it's behaviour. if + # either stdout or stderr is supplied those objects should respond_to? '<<' + # and only status will be returned + # + require 'systemu' + + date = %q( ruby -e" t = Time.now; STDOUT.puts t; STDERR.puts t " ) + + stdout, stderr = '', '' + status = systemu date, 'stdout' => stdout, 'stderr' => stderr + p [ status, stdout, stderr ] + + ~ > ruby samples/b.rb + + [#, "2011-12-11 22:07:30 -0700\n", "2011-12-11 22:07:30 -0700\n"] + + + <========< samples/c.rb >========> + + ~ > cat samples/c.rb + + # + # of course stdin can be supplied too. synonyms for 'stdin' include '0' and + # 0. the other stdio streams have similar shortcuts + # + require 'systemu' + + cat = %q( ruby -e" ARGF.each{|line| puts line} " ) + + status = systemu cat, 0=>'the stdin for cat', 1=>stdout='' + puts stdout + + ~ > ruby samples/c.rb + + the stdin for cat + + + <========< samples/d.rb >========> + + ~ > cat samples/d.rb + + # + # the cwd can be supplied + # + require 'systemu' + require 'tmpdir' + + pwd = %q( ruby -e" STDERR.puts Dir.pwd " ) + + status = systemu pwd, 2=>(stderr=''), :cwd=>Dir.tmpdir + puts stderr + + + ~ > ruby samples/d.rb + + /private/var/folders/sp/nwtflj890qnb6z4b53dqxvlw0000gp/T + + + <========< samples/e.rb >========> + + ~ > cat samples/e.rb + + # + # any environment vars specified are merged into the child's environment + # + require 'systemu' + + env = %q( ruby -r yaml -e" puts ENV[ 'answer' ] " ) + + status = systemu env, 1=>stdout='', 'env'=>{ 'answer' => 0b101010 } + puts stdout + + ~ > ruby samples/e.rb + + 42 + + + <========< samples/f.rb >========> + + ~ > cat samples/f.rb + + # + # if a block is specified then it is passed the child pid and run in a + # background thread. note that this thread will __not__ be blocked during the + # execution of the command so it may do useful work such as killing the child + # if execution time passes a certain threshold + # + require 'systemu' + + looper = %q( ruby -e" loop{ STDERR.puts Time.now.to_i; sleep 1 } " ) + + status, stdout, stderr = + systemu looper do |cid| + sleep 3 + Process.kill 9, cid + end + + p status + p stderr + + ~ > ruby samples/f.rb + + # + "1323666451\n1323666452\n1323666453\n" + +