2013-05-08 60 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