aslakjo / systemu Goto Github PK
View Code? Open in Web Editor NEWThis project forked from ahoward/systemu
univeral capture of stdout and stderr and handling of child process pid for windows, *nix, etc.
License: Other
This project forked from ahoward/systemu
univeral capture of stdout and stderr and handling of child process pid for windows, *nix, etc.
License: Other
NAME systemu SYNOPSIS univeral 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 [#<Process::Status: pid=3359,exited(0)>, "Thu May 20 13:21:48 -0600 2010\n", "Thu May 20 13:21:48 -0600 2010\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 [#<Process::Status: pid=3364,exited(0)>, "Thu May 20 13:21:48 -0600 2010\n", "Thu May 20 13:21:48 -0600 2010\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/nO/nOjBCb30ELegrm98Bhyvbk+++TM/-Tmp- <========< 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 #<Process::Status: pid=3384,signaled(SIGKILL=9)> "1274383308\n1274383309\n1274383310\n"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.