5

我正在使用 trollop 来解析命令行参数,并且我想添加一些必需的位置参数filename1filename2如下所示:

usage: my_script [--help] [--some-option VALUE] [--some-flag] filename1 filename2

我如何用 trollop 做到这一点?

4

2 回答 2

4

Trollop 还为您提供了提供相同信息leftovers的属性。下面是你如何使用它:

#!/usr/bin/env ruby

require 'trollop'
require 'pp'

p = Trollop::Parser.new do
    opt :monkey, 'Use monkey mode'                    # flag --monkey, default false
    opt :name, 'Monkey name', :type => :string        # string --name <s>, default nil
    opt :num_limbs, 'Number of limbs', :default => 4  # integer --num-limbs <i>, default to 4
end

p.parse

puts 'Leftovers:'
pp p.leftovers
puts 'ARGV:'
pp ARGV

结果如下:

> ruby se_01.rb foo blarb -m
Leftovers:
["foo", "blarb"]
ARGV:
["foo", "blarb"]
于 2014-11-06T23:03:00.297 回答
3

Trollop 是关于解析选项的——可能存在也可能不存在的东西。

必需的位置参数不是一个选项。要访问您的位置参数,只需查看 argv。如果您混合使用选项和所需的位置参数,则 trollop 将负责剥离可选的内容,并使 ARGV 处于仅包含您关心的内容的状态。

如果您运行此示例代码:

#!/usr/bin/env ruby

require 'trollop'

opts = Trollop::options do
  opt :monkey, "Use monkey mode"                    # flag --monkey, default false
  opt :name, "Monkey name", :type => :string        # string --name <s>, default nil
  opt :num_limbs, "Number of limbs", :default => 4  # integer --num-limbs <i>, default to 4
end

puts "opts: #{opts}"
puts "ARGV: #{ARGV}"

这是您将得到的:

[~/tbear/bin]$ ./t.rb
opts: {:monkey=>false, :name=>nil, :num_limbs=>4, :help=>false}
ARGV: []

[~/tbear/bin]$ ./t.rb arg1
opts: {:monkey=>false, :name=>nil, :num_limbs=>4, :help=>false}
ARGV: ["arg1"]

[~/tbear/bin]$ ./t.rb -m arg1
opts: {:monkey=>true, :name=>nil, :num_limbs=>4, :help=>false, :monkey_given=>true}
ARGV: ["arg1"]

请注意示例 2 和示例 3 中的 ARGV 是如何相同的。

于 2013-12-10T17:16:19.180 回答