2012-06-15 39 views
5

我想从运行红宝石耙脚本可执行文件,说foo.exe产卵红宝石的过程,捕捉标准输出,标准错误,获得存在状态

我想从foo.exeSTDOUTSTDERR输出直接写入控制台我正在运行rake任务。

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

我一直在玩backticksprocess.spawnsystem但我不能得到我想要的行为,只有部分

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

+0

“Kernel#system”未涵盖哪部分内容? –

+0

我知道和openSSL一起工作的'Net-SSH'纯ruby库具有这样的功能 - 'channel'的'exec'方法返回'[stdout,stderr,exit_code,exit_signal]'的数组。也许你可以以某种方式使用它... – Ribtoks

+0

也许你应该列出你的每个命令的问题? –

回答

8

system得到你想要的STDOUT行为。它也返回true为零退出代码,这可能是有用的。

$?与有关最后system呼叫信息填充,因此您可以检查的退出状态:

system 'foo.exe' 
$?.exitstatus 

我用这些东西的组合,Runner.execute_command为例。

+0

原来我没有需要STDERR,所以我不能验证这_does_处理它,但它适用于我的需要 –

2

反引号将得到stdout捕获到生成的字符串

foo.exe建议你运行的是Windows - 你有没有安装像Cygwin的东西吗?如果你unixy外壳的内部运行脚本,你可以这样做:

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

快速谷歌搜索说,这也应该在本地Windows工作外壳,但我不能对此进行测试assupmtion

+0

对于'2>&1' +1,偷偷摸摸! –

相关问题