在ruby中生成一个进程,捕获stdout,stderr,获得退出状态

时间:2012-06-15 12:11:24

标签: ruby

我想从ruby rake脚本运行一个可执行文件,比如foo.exe

我希望STDOUT的{​​{1}}和STDERR输出直接写入我正在运行rake任务的控制台。

当进程完成时,我想将退出代码捕获到变量中。我如何实现这一目标?

我一直在玩foo.exebackticksprocess.spawn,但我无法获得我想要的所有行为,只有部分

更新:我在Windows上,在标准命令提示符下,而不是cygwin

2 个答案:

答案 0 :(得分:8)

system获得您想要的STDOUT行为。它还返回true以获得零退出代码,这可能很有用。

$?会填充有关上一次system来电的信息,以便您可以检查退出状态:

system 'foo.exe'
$?.exitstatus

我在Runner.execute_command中使用了这些内容的组合作为示例。

答案 1 :(得分:2)

反引号会将stdout捕获到结果字符串

foo.exe表明你正在运行Windows - 你有没有安装cygwin的东西?如果你在unixy shell中运行脚本,你可以这样做:

result = `foo.exe 2>&1`
status = $?.exitstatus

快速谷歌搜索说这应该也适用于原生Windows shell但我无法测试这个假设