我想将sox
命令的统计信息分配给一个ruby变量。当使用system
时,根据命令的成功,我得到“真/假”。所以,我已经试过:Ruby从系统命令返回(sox)
%x{ sox file -n stats }
这说明统计在我的控制台,但实际上返回一个空字符串,像这样:
Stat: 123
Another stat: 234
""
我想获得一个包含统计数据的字符串。这可能吗?
我想将sox
命令的统计信息分配给一个ruby变量。当使用system
时,根据命令的成功,我得到“真/假”。所以,我已经试过:Ruby从系统命令返回(sox)
%x{ sox file -n stats }
这说明统计在我的控制台,但实际上返回一个空字符串,像这样:
Stat: 123
Another stat: 234
""
我想获得一个包含统计数据的字符串。这可能吗?
使用反勾:
result = `sox file -n stats`
确保SOX不输出到STDERR。在这种情况下重定向。
result = `sox file -n stats 2>&1`
编辑 返回蜱%x{}
是相同的。抱歉。我把它与system
混合起来。重定向很可能是你需要的。
这是一样的。从[docs](http://ruby-doc.org/core-2.0/Kernel.html#method-i-60):*内置语法'%x {...}'使用此方法。 * – Stefan 2013-05-08 17:07:02
@Stefan对。我认为它归结为'system'。 – 2013-05-08 17:10:53
@Stefan感谢您指出这一点。 – 2013-05-08 17:16:54
所以最后你想''123456'在你的ruby var? – 2013-05-08 17:00:34
'%x {...}'将捕获子shell的stdout并将其作为字符串返回。如果您在控制台上看到输出,但没有收到回执,很可能程序正在写入stderr而不是stdout。尝试:'%x {sox file -n stats 2>&1}'将stdout和stderr都指向stdout。 – dbenhur 2013-05-08 17:07:19