2013-08-28 22 views
5

Tôi đang sử dụng đi vơ vẩn để phân tích đối số dòng lệnh, và tôi muốn thêm một số đối số vị trí cần thiết như filename1filename2 dưới đây:Làm cách nào để tạo các đối số theo vị trí với trollop?

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

Làm thế nào để làm điều này với người đàn bà lẳng lơ?

+0

Bạn có tìm hiểu làm thế nào để sử dụng lập luận vị trí với người đàn bà lẳng lơ? – dusan

+0

@dusan Không may mắn. – Dean

Trả lời

3

Trollop là về các tùy chọn phân tích cú pháp - những thứ có thể có hoặc không có mặt.

Đối số vị trí bắt buộc không phải là một tùy chọn. Để truy cập các đối số vị trí của bạn, chỉ cần nhìn vào argv. Nếu bạn sử dụng kết hợp các tùy chọn và các đối số vị trí bắt buộc, trollop sẽ xử lý việc loại bỏ các công cụ tùy chọn và để ARGV ở trạng thái chỉ chứa những thứ bạn quan tâm.

Nếu bạn chạy mã ví dụ này:

#!/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}" 

Dưới đây là những gì bạn sẽ nhận được:

[~/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"] 

Chú ý cách argv là như nhau trong ví dụ 2 và ví dụ 3.

4

người đàn bà lẳng lơ cũng cung cấp cho bạn thuộc tính leftovers, rằng provides the same information. Đây là cách bạn muốn sử dụng nó:

#!/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 

Dưới đây là kết quả:

> ruby se_01.rb foo blarb -m 
Leftovers: 
["foo", "blarb"] 
ARGV: 
["foo", "blarb"]