【问题标题】:How do I use the GLI 2.0 ruby gem to accept ARGF data?如何使用 GLI 2.0 ruby​​ gem 来接受 ARGF 数据?
【发布时间】:2012-09-06 15:46:25
【问题描述】:

我使用GLI 2.0 gem 为所有漂亮的命令行结构创建了自己的gem。它工作正常,但我也想支持管道输入的数据。

my_prog new some_file # this is ok already
some_process | my_prog # how do I add this?

我需要检查它是如何被调用的(不知何故),然后采取适当的行动。我已经简化了一点,但我当前的代码如下。

require 'rubygems'
require 'gli'

include GLI::App

desc 'My example'
command :new do |c|
  desc 'Specify input file'
  arg_name 'filename'
  c.flag [:i,:input]

  c.action do |global_options,options,args|
    exit_now!("Input file must be specified") if options[:o].nil?
    exit_now!("New failed") unless File.exists?(options[:o])
  end
end

exit run(ARGV)

【问题讨论】:

  • 当您尝试在动作块中使用 ARGF 时会发生什么? GLI 修改了 ARGV,所以我认为它应该可以工作,虽然我没有尝试过。 ARGF 文档表明 ARGV 的突变确实有影响
  • 我还没试过。鉴于我没有指定命令,它怎么知道要使用哪个命令?我知道要使用哪一个,但我不知道如何指定。我确实考虑过设置默认值,但我喜欢当前显示帮助的默认行为。
  • ARGF 非常灵活(请参阅gist.github.com/3658622),但是对于您正在尝试的内容,my_prog 需要一个命令来知道该做什么。如果你给它一个,GLI 会在解析时将它从 ARGV 中删除,ARGF 应该像宣传的那样工作。
  • 效果很好。谢谢您的帮助。我稍微作弊并使用不同的管道命令,所以它保持独立。

标签: ruby command-line gli-gem


【解决方案1】:

只是总结上面的讨论:

GLI 当前对 ARGV 进行了变异,因此 ARGF 在命令的 action 块内应该可以正常工作,即使您正在输入管道。但是,GLI 确实需要某种命令才能运行,即使它是将 help 的默认值覆盖到相关命令中。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2017-09-23
    • 2011-11-15
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多