如何在ruby中使用两个参数异步运行exe?

时间:2012-04-10 16:08:50

标签: ruby-on-rails ruby ruby-on-rails-3 shell rubygems

当我打开页面时,

exe应该运行。异步流程需要运行。

有没有办法在ruby中使用两个参数异步运行exe?

我已经尝试过ruby命令--system(),exec()但是等待进程完成。我需要使用参数启动exe,无需等待进程完成

是否有任何rubygems支持我的问题?

2 个答案:

答案 0 :(得分: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 :(得分:1)

exec将控件切换为新进程,永不返回。 system创建一个子进程并等待它完成。

您可能想要做的是fork然后exec创建新流程而无需等待它返回。您也可以使用可能give you more controlwin32ole库。