2

を使用する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

私は何を間違っていますか?

4

2 に答える 2

1

推測: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

問題を修正しますか?

于 2013-03-20T09:48:13.117 に答える
1

記録のために、これが私の最終的な解決策です:

Open3.popen3(command) do |stdin, stdout, stderr|
  stdin.puts instructions
  stdin.close  # make sure the subprocess is done
  stdout.gets  # and read all output - EOF means the process has completed.
  stderr.gets
end
于 2013-03-21T15:45:24.930 に答える