Переменная Ruby из команды внешней оболочки - PullRequest
1 голос
/ 11 декабря 2011

Я использую камень под названием artii (http://rubygems.org/gems/artii), который создает изображения ascii art из текста.

Я могу только назвать его с помощью system (), однако мне бы хотелосьчтобы отобразить результат в виде текста на веб-странице

Мой файл .rb:

def makeText
  @word = system('artii Hello World')
  puts @word
  @word
end

результат puts:

=>  _    _      _ _       
=> | |  | |    | | |       
=> | |__| | ___| | | ___  
=> |  __  |/ _ \ | |/ _ \ 
=> | |  | |  __/ | | (_) |
=> |_|  |_|\___|_|_|\___/ 

Затем в моем файле haml:

#{makeText} 
=> true

Есть ли способ взять результат из командной строки и преобразовать его в строку, массив или хеш для отображения на веб-странице?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Мне кажется смешным называть gem как внешнюю команду, используя system или обратные галочки. Вы можете использовать его из Ruby как библиотеку Ruby без какого-либо взаимодействия с системой. Простейшим вызовом будет:

@word = Artii::Base.asciify('Hello World')

Если вы хотите более сложный вызов (т. Е. Разные шрифты, стили и т. Д.), Тогда посмотрите документацию к этому гему .

0 голосов
/ 11 декабря 2011

Вы хотите использовать backticks вместо system метода. Просто заключите вашу команду оболочки в обратные кавычки, и возвращаемое значение будет строкой, содержащей все, что выводится в стандартный вывод.

@word = `artii Hello World`

Примечание: будьте осторожны, чтобы не передавать пользовательский ввод в оболочку без предварительной его очистки, чтобы не допустить выполнения злоумышленниками произвольных команд оболочки. Пока вы один из тех, кто поставляет строку в обратных кавычках, а не пользователь, все в порядке.

...