我手邊有一個問題,它需要我產生一個命令提示符作爲另一個進程,並向它發送一些命令並捕獲/解析命令輸出。這種交互需要以父子進程的形式表示,所有的命令都可以放在一個ruby文件中,並且在運行ruby文件時,命令被髮送到控制檯(命令提示符)並從它接收輸出並在ruby腳本中處理。在不同的進程中產生命令提示符,並在Windows上發送/接收命令
我將遵循的一般邏輯是:
- 菌種不同的工藝通過使用叉,並得到一個進程id
- 獲取流的過程
- 寫入的輸入流處理並從輸出流中讀取。
我使用的環境是安裝有Ruby 1.9.2的Windows XP機器。我下載了通過here找到的win32進程庫。通過使用圖書館,我可以做第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的進程庫是基於Windows上使用的進程和線程,我試圖去通過MSDN幫助它。在閱讀Creation of a Console文章時,我發現GetStdHandle方法可用於獲取輸入和輸出流的句柄。但是,我無法在win32-process的任何地方找到這種方法。
有人可以提供一些關於如何進行步驟2和3的指導嗎?
另外,有沒有其他方法可以用來解決手頭的問題?
另外,我想了解更多關於進程間通信或者一般產卵和分支進程的信息,那麼有人可以告訴我一些很好的參考資料,我可以在哪裏研究它們嗎?
在此先感謝
爲什麼你不能只用一個例子'系統() '或反引號來運行你的命令? – Casper
我認爲system()不會返回句柄 – chaitanya
好的,IO.popen'怎麼樣?例如:'IO.popen('dir')。readlines'。 – Casper