2013-05-08 3 views
0

Я пытаюсь присвоить статистику с помощью команды sox рубиновой переменной. При использовании system я получаю «true/false» в зависимости от успеха команды. Так что я пробовал:Ruby get return from system command (sox)

%x{ sox file -n stats } 

Это показывает статистику в моей консоли, но на самом деле возвращает пустую строку, например, так:

Stat: 123 
Another stat: 234 
"" 

Я хочу, чтобы получить строку, содержащую статистику. Это возможно?

+0

так что в конце концов вы хотите '123456' в своем рубине var? –

+3

'% x {...}' будет записывать stdout подоболочки и возвращать его как строку. Если вы видите вывод на консоли, но не получаете его в возврате, скорее всего, программа пишет stderr вместо stdout. Попробуйте: '% x {sox file -n stats 2> & 1}', чтобы получить как stdout, так и stderr, направленные на stdout. – dbenhur

ответ

2

Использование обратно клещей:

result = `sox file -n stats` 

Убедитесь, что сокс не вывод 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

+0

@Stefan Право. Я думал, что это спустилось к «системе». –

+0

@Stefan Спасибо, что указали это. –