Method: Open4.open4
- Defined in:
- lib/open4.rb
.open4 ⇒ Object
- stdin, stdout, stderr, pid
-
popen4(command);
–}}}
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/open4.rb', line 68 def popen4(*cmd) #--{{{ pw = IO::pipe # pipe[0] for read, pipe[1] for write pr = IO::pipe pe = IO::pipe verbose = $VERBOSE begin $VERBOSE = nil # shut up warning about forking in threads, world writable # dirs, etc cid = fork{ # child pw[1].close STDIN.reopen(pw[0]) pw[0].close pr[0].close STDOUT.reopen(pr[1]) pr[1].close pe[0].close STDERR.reopen(pe[1]) pe[1].close STDOUT.sync = true STDERR.sync = true exec(*cmd) } ensure $VERBOSE = verbose end pw[0].close pr[1].close pe[1].close pi = [pw[1], pr[0], pe[0]] pw[1].sync = true if defined? yield begin yield(cid, *pi) return(Process::waitpid2(cid).last) ensure pi.each{|p| p.close unless p.closed?} end end [cid, pw[1], pr[0], pe[0]] #--}}} end |