コマンドプロンプトを別のプロセスとして生成し、いくつかのコマンドをそれに送信し、コマンド出力をキャプチャ/解析する必要があるという問題があります。この相互作用は、すべてのコマンドを ruby ファイルに入れることができ、ruby ファイルを実行すると、コマンドがコンソール (コマンド プロンプト) に送信され、そこから出力が受信されるという親子プロセスの形式である必要があります。 Rubyスクリプトで処理されます。
私が従う一般的なロジックは次のとおりです。
- フォークを使用して別のプロセスを生成し、プロセス ID を取得する
- プロセスのストリームを取得する
- プロセスの入力ストリームに書き込み、出力ストリームから読み取ります。
私が使用している環境は、Ruby 1.9.2 がインストールされた Windows XP マシンです。ここにある win32-process ライブラリをダウンロードしました。そのライブラリを使用することで、次のようにステップ 1 を実行できます。
require 'win32/process'
APP_NAME = "C:\\Windows\\system32\\cmd.exe"
process_info = Process.create(:app_name => APP_NAME,
:creation_flags => Windows::Process::CREATE_NEW_CONSOLE,
:process_inherit => false,
:thread_inherit => true,
:cwd => "C:\\"
)
win32-process ライブラリは Windows でのプロセスとスレッドの使用に基づいているため、MSDNのヘルプを調べてみました。コンソールの作成に関する記事を読んでいるときに、GetStdHandle メソッドを使用して、入力および出力ストリームへのハンドルを取得できることがわかりました。しかし、このメソッドが win32-process のどこにも実装されているのを見つけることができませんでした。
手順 2 と 3 を進める方法について、誰かが私にガイダンスを提供できますか?
また、目前の問題を解決するために使用できる他の方法はありますか?
また、プロセス間通信または一般的なプロセスのスポーンとフォークについて詳しく知りたいので、誰かがそれらを研究できる良い参考文献を教えてもらえますか?
前もって感謝します