2012-04-10 46 views
5

exe應該在我打開頁面時運行。異步進程需要運行。如何使用ruby中的兩個參數異步運行exe?

有沒有辦法運行EXE與Ruby中的兩個參數異步?

我已經嘗試了ruby命令 - system(),exec(),但它的等待過程完成。我需要啓動exe參數無需等待過程完成

是否有任何rubygems支持我的問題?

回答

7

您可以使用Process.spawnProcess.wait2

pid = Process.spawn 'your.exe', '--option' 

# Later... 
pid, status = Process.wait2 pid 

你的程序將作爲解釋的一個子進程來執行。除此之外,它的行爲就好像它是從命令行調用的一樣。

您還可以使用Open3.popen3

require 'open3' 
*streams, thread = Open3.popen3 'your.exe', '--option' 

# Later... 
streams.each &:close 
status = thread.value 

主要在這裏不同的是,你可以訪問到三個IO對象。該進程的標準輸入,輸出和錯誤流將按照該順序重定向到它們。

如果您打算消耗程序的輸出或通過其標準輸入流與其進行通信,這非常棒。通常打印在終端上的文字將會提供給您的腳本。

您還會得到一個等待程序完成執行的線程,這很方便直觀。

1

exec將控件切換到新的過程並且從不返回。 system創建一個子流程並等待它完成。

你可能想要做的是fork然後exec創建一個新的進程而不用等待它返回。您也可以使用win32ole庫,它可能是give you more control