来自外部shell命令的Ruby变量

时间:2011-12-11 01:00:58

标签: ruby shell operating-system gem haml

我正在使用名为artii(http://rubygems.org/gems/artii)的宝石,它可以从文本中创建ascii艺术图像。

我似乎只能使用system()调用它,但是我想将结果显示为网页中的文本

我的.rb文件:

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

puts

的结果
=>  _    _      _ _       
=> | |  | |    | | |       
=> | |__| | ___| | | ___  
=> |  __  |/ _ \ | |/ _ \ 
=> | |  | |  __/ | | (_) |
=> |_|  |_|\___|_|_|\___/ 

然后,在我的haml文件中:

#{makeText} 
=> true

有没有办法从命令行获取结果并将其转换为字符串,数组或哈希以显示在网页中?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用system或反引号将 gem 称为外部命令似乎很荒谬。您可以将它从Ruby用作Ruby库,而无需任何系统交互。最简单的调用是:

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

如果您想要更复杂的调用(即不同的字体,样式等),请查看that gem's documentation

答案 1 :(得分:0)

您想使用backticks而不是system方法。只需将shell命令包含在反引号中,返回值将是一个字符串,其中包含输出到标准输出的任何内容。

@word = `artii Hello World`

注意:注意不要先将用户输入传递给shell而不先清理它,以防止恶意用户执行任意shell命令。只要你是用反引号提供字符串的那个,而不是用户,你就没事了。