2013-05-08 61 views
0

我想将sox命令的统计信息分配给一个ruby变量。当使用system时,根据命令的成功,我得到“真/假”。所以,我已经试过:Ruby从系统命令返回(sox)

%x{ sox file -n stats } 

这说明统计在我的控制台,但实际上返回一个空字符串,像这样:

Stat: 123 
Another stat: 234 
"" 

我想获得一个包含统计数据的字符串。这可能吗?

+0

所以最后你想''123456'在你的ruby var? – 2013-05-08 17:00:34

+3

'%x {...}'将捕获子shell的stdout并将其作为字符串返回。如果您在控制台上看到输出,但没有收到回执,很可能程序正在写入stderr而不是stdout。尝试:'%x {sox file -n stats 2>&1}'将stdout和stderr都指向stdout。 – dbenhur 2013-05-08 17:07:19

回答

2

使用反勾:

result = `sox file -n stats` 

确保SOX不输出到STDERR。在这种情况下重定向。

result = `sox file -n stats 2>&1` 

编辑 返回蜱%x{}是相同的。抱歉。我把它与system混合起来。重定向很可能是你需要的。

+0

这是一样的。从[docs](http://ruby-doc.org/core-2.0/Kernel.html#method-i-60):*内置语法'%x {...}'使用此方法。 * – Stefan 2013-05-08 17:07:02

+0

@Stefan对。我认为它归结为'system'。 – 2013-05-08 17:10:53

+0

@Stefan感谢您指出这一点。 – 2013-05-08 17:16:54