簡體   English   中英

Ruby Options解析器不讀取命令行選項

[英]Ruby Options parser not reading command line options

我正在嘗試使用Ruby內置選項解析器

我有這個檔案

文件parser.rb#!/ usr / bin / env ruby​​需要'optparse'需要'pp'

 class parser

 def initialize(args)
 @options = Hash.new()
 @op = OptionParser.new do |opts|
 @options[:verbose] = false
opts.on('-v', '--verbose', 'Output more information') do 
    @options[:verbose] = true
end

@options[:quick] = false
opts.on( '-q', '--quick', 'Perform the task quickly' ) do 
    @options[:quick] = true
end

@options[:logfile] = nil
opts.on( '-l', '--logfile FILE', 'Write log to FILE' ) do|file|
           @options[:logfile] = file
end

opts.on( '-h', '--help', 'Display this screen' ) do
         puts opts
    exit
end

    @options[:sID] = "-1"
opts.on('-sID', '--senderID', 'Sender ID used by device') do |sID|
     @options[:sID] = sID
end

@options[:rID] = "-1"
opts.on('-rID', '--receiverID', 'Receiver ID used by device') do |rID|
    @options[:rID] = rID
end

  @op.parse!
  @op
  end

 def getOptionsHash
 @options
  end

然后我試圖在下面的文件中使用此類

 #!/usr/bin/env ruby

 # Setup Bundler
 require 'rubygems'
 require 'bundler/setup'

 require_relative 'parser'


 #Variables in the options hash in parser.rb

 op = Parser.new(ARGV)
 pp op.getOptionsHash()

當我在不使用args的命令行上運行它時,它使用默認值:./push_test.rb

我得到以下輸出:

 {:verbose=>false,
  :quick=>false,
   :logfile=>nil,
  :sID=>"-1",
  :rID=>"-1",

  }

當我在帶有args的命令行上運行此命令時:./push_test.rb -sID“ 33”

我得到以下輸出:

  {:verbose=>false,
   :quick=>false,
   :logfile=>nil,
  :sID=>"ID",
  :rID=>"-1",

  }

為什么未將sID設置為33?

任何人都可以幫忙嗎?我試圖解決這個問題,但沒有取得任何進展

似乎短開關必須是單個字符-s

./push_test.rb -sID "33"

輸出:

{:verbose=>false, :quick=>false, :logfile=>nil, :sID=>"ID", :rID=>"-1" }

因為-s到第一個空格的所有內容都將分配給:sID,在您的情況下,它的單詞“ ID”緊跟在“ -s”之后,因此您將得到:sID =>"ID"

./push_test.rb -s "33"將解決問題。

從OptParser 文檔

 Short style switch:: Specifies short style switch which takes a mandatory, optional or no argument. It's a string of the following form: "-xMANDATORY" "-x[OPTIONAL]" "-x" 

因此,在指定switch -sID您將使用名稱為ID參數定義switch -s與您可能期望的有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM