我有一个Rails应用程序,它使用Open3.popen3它工作得很好,但有时应用程序会在不等待进程完成的情况下继续运行。
下面是我正在使用的Open3.popen3函数的外观(实际上它运行一个cat函数):

def cat_func(var)
  ## some stuff happens
  exit = 0
  Open3.popen3(" #{cat_command}"){|stdin, stdout, stderr, wait_thr|
    pid = wait_thr.pid
    error = std err.gets
    exit = wait_thr.value
  }
  #HERE IS TRYING TO INTERCEPT ERRORS:
  if error.match(/^cat:/)
    ### Do something
  end
  call_next_function
end

我做错什么了?

最佳答案

只是一个猜测:也许你还需要使用stdout,所以也许添加一行

def cat_func(var)
  exit = 0
  Open3.popen3(" #{cat_command}") do |stdin, stdout, stderr, wait_thr|
    pid   = wait_thr.pid
    stdout.gets
    error = stderr.gets
    exit  = wait_thr.value
  end

  # more stuff...
end

解决问题?

关于ruby-on-rails - 等待popen3进程完成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11710542/

10-09 21:54