【问题标题】:Ruby variable from an external shell command来自外部 shell 命令的 Ruby 变量
【发布时间】:2011-12-11 01:00:57
【问题描述】:

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

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

我的 .rb 文件:

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

puts的结果:

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

然后,在我的haml文件中:

#{makeText} 
=> true

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

谢谢!

【问题讨论】:

    标签: ruby shell operating-system gem haml


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      @word = `artii Hello World`
      

      注意:请注意不要将用户输入传递给 shell 而不先对其进行清理,以防止恶意用户执行任意 shell 命令。只要您是提供反引号字符串的人,而不是用户,就可以了。

      【讨论】:

      • 太好了,谢谢!现在我有一个字符串,但删除了行返回 - 我尝试使用 String.split(“n”) 以及 \r\n 任何进一步的帮助表示赞赏。
      • 你想要一个行数组吗?那么您要查找的命令是@word.split("\n")"\n" 是换行符,默认的字符串分隔符(在大多数情况下)。
      • 终于明白了...必须使用word.split(“\\n”) 然后gsub(/\n/, '<br />’) 为html 插入换行符,并使用input.gsub(" ", ' ’) 处理空格再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多