【问题标题】:How would I force Kernel#gets to use STDIN#gets in a rake task?我将如何强制 Kernel#gets 在 rake 任务中使用 STDIN#gets?
【发布时间】:2013-06-18 21:04:12
【问题描述】:

所以我试图干掉一个 Rake 任务,它运行一个接受用户输入的脚本,I've run into the same problem as this poster - 默认情况下,只调用 gets 假定 rake 参数(在这种情况下,db:seed)是它应该从中读取的文件,当然不存在。我通过调用STDIN.gets 解决了这个问题,它工作正常,但我希望能够像使用puts 一样使用gets(默认情况下,Rake 似乎对STDOUT 没有问题) - 作为静态方法。

有什么方法可以强制Kernel#gets 在 Rake 中读取 STDIN? (或者更一般地说,有什么方法可以强制Kernel#gets 在表面上传递命令行参数时从STDIN 读取?)或者这是一个不好的做法?

【问题讨论】:

  • 这实际上是一般的 Ruby 行为,并非特定于 rake;也就是说,任何带有 gets 的脚本都会尝试从命令行选项命名的文件中读取。
  • 有办法,但为什么呢? STDIN.gets 是一个非常优雅的解决方案,它应该如何完成。其他方法涉及代码调整$stdin,这可能会立即破坏其他东西,或者把你画到角落里。

标签: ruby-on-rails ruby rake


【解决方案1】:

(由@the-tin-man 在this comment 中回答)

强制Kernel#gets 在任何情况下(包括Rake)从STDIN 读取,在DRYness 中获得的优势确实很小。虽然可以做到(通过修改$stdin),但不应该这样做,因为它会变得脆弱和hacky。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2014-04-09
    • 2010-11-08
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多