我想从一个ruby rake脚本中运行一个可执行文件,比如说foo.exe
我希望从foo.exe
中获取STDOUT
和STDERR
输出,并将其直接写入到我正在运行rake任务的控制台中。
当进程完成时,我想将退出代码捕获到一个变量中。我该如何实现这一点?
我已经尝试了backticks
、process.spawn
、system
,但我无法得到我想要的所有行为,只能得到部分。
更新:我在Windows上,在标准命令提示符中运行,而不是cygwin。
我想从一个ruby rake脚本中运行一个可执行文件,比如说foo.exe
我希望从foo.exe
中获取STDOUT
和STDERR
输出,并将其直接写入到我正在运行rake任务的控制台中。
当进程完成时,我想将退出代码捕获到一个变量中。我该如何实现这一点?
我已经尝试了backticks
、process.spawn
、system
,但我无法得到我想要的所有行为,只能得到部分。
更新:我在Windows上,在标准命令提示符中运行,而不是cygwin。
system
可以实现您所需的STDOUT
行为,并返回零退出代码的true
,这非常有用。使用$?
获取最后一个system
调用的信息,以检查退出状态:system 'foo.exe'
$?.exitstatus
我在Runner.execute_command
中使用了这些东西的组合作为一个例子。
反引号将使stdout
捕获到结果字符串中。
foo.exe
表明您正在运行Windows - 您是否安装了类似cygwin的东西?如果在Unixy shell中运行脚本,则可以执行以下操作:
result = `foo.exe 2>&1`
status = $?.exitstatus
Kernel#system
的哪一部分没有被覆盖? - Lars HaugsethNet-SSH
是一个纯Ruby库,它与openSSL一起工作,并具有这样的功能 - 它的channel
的exec
方法返回一个数组[stdout,stderr,exit_code,exit_signal]
。也许你可以以某种方式使用它... - Ribtoks