Method: Bio::Command.call_command_fork
- Defined in:
- lib/bio/command.rb
.call_command_fork(cmd, options = {}) ⇒ Object
Executes the program via fork (by using IO.popen(“-”)) and exec. A block must be given. An IO object is passed to the block.
From the view point of security, this method is recommended rather than call_command_popen.
Arguments:
-
(required) cmd: Array containing String objects
-
(optional) options: Hash
- Returns
-
(undefined)
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/bio/command.rb', line 196 def call_command_fork(cmd, = {}) dir = [:chdir] cmd = safe_command_line_array(cmd) IO.popen("-", "r+") do |io| if io then # parent yield io else # child # chdir to options[:chdir] if available begin Dir.chdir(dir) if dir rescue Exception Process.exit!(1) end # executing the command begin Kernel.exec(*cmd) rescue Errno::ENOENT, Errno::EACCES Process.exit!(127) rescue Exception end Process.exit!(1) end end end |