【发布时间】: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