RubyのEventMachine.popenには、グローバルモジュールベースのハンドラが必要なようです。地元のハンドラを持っていることは不可能と思われるので、これは例えば、過剰です:ローカルハンドラでEventMachine.popenを呼び出す
def local_run(cmd)
q = EventMachine::Queue.new
module Handler
def receive_data data
q.push data
end
end
EM.system(cmd, Handler)
q
end
上記のコードが実行されないでしょう。ルビーが文句を言うmodule definition in method body (SyntaxError)
EM.system
のローカルハンドラを定義する方法はありますか?
気になるのは、ローカルコマンドを非同期で実行し、STDOUTデータを含むキューを返すことです。
私はEM.runを使用しないことについて何も言わなかったが、良いは、ハンドラ関数を定義する方法があることを知っていますローカルに。残念ながら、あなたの 'receive_data'は親スコープの変数にアクセスできないようです。 https://gist.github.com/1498155#commentsを参照してください。他のEM非同期ハンドラでこの問題が発生したことはありません。このため、このアプローチを自分のコードで使用することはできません。 –
最後に、 'class'を使った2番目の例は、(' ** ** ** 'の中から ''すべてのことを)覚えています。 ''メソッド本体のクラス定義(SyntaxError) 'につながります。私が "地方"を意味するのは、質問の中で**機能**のローカルスコープです。 –
ああ、私は上記の「EventMachineループなし」のコメントを正しく解釈しなかった。 EM.runの使用を計画していなかったようです。 – dj2