簡體   English   中英

如何使用OptionParser打開帶有命令行選項的文件?

[英]How do you use OptionParser to open a file with command-line options?

嘗試通過命令行選項從文件中打印行時出現此錯誤

no implicit conversion of true into String (TypeError)
from threat_detection.rb:64:in 'new'
from threat_detection.rb:64:in '<main>'

如果我使用文件名而不是options[:config_file]它將按預期方式打印文件的行。

if options[:config_file]
  File.new(options[:config_file], 'r').each { |params| puts params }
end

if options[:host_file]
  File.new(options[:host_file], 'r').each { |host| puts host }
end

看起來您正在嘗試在Ruby中使用OptionParser類。 由於它不是核心庫的一部分,因此請確保在程序頂部包括以下內容:

require 'optparse'

此外,請確保正確創建選項:

options = {}

optparse = OptionParser.new do |opts|
  options[:config_file] = nil
  opts.on('-f', '--config-file', 'Enter the config file to open.') do
    options[:dry_run] = true
  end
end

optparse.parse!

在命令行中使用標志時,實際上是將變量設置為truefalse 例如,默認情況下,對於大多數操作(如rm ),- -v (詳細)都設置為false 該命令及其可選標志后面是(有時是必需的)命令行參數,這是您所用的文件名。

調用腳本應類似於

$ ruby ./my_program.rb --config-file /path/to/some/file
       ^               ^             ^
       program         flag          argument

如您所見,optparse選項必須為布爾值。 您只想在存在該標志的情況下打開文件(選項為true)。 您的程序只需稍作更改即可運行:

if options[:config_file]
  File.new(ARGV[0], 'r').each { |params| puts params }
end

ARGV是腳本的所有命令行參數的數組(以下標記)。 如果僅包含一個參數,則需要第一個元素或索引0( ARGV[0] )。 所有參數用空格分隔。 因此,如果對options[:host_file]實現相同的技術,則可以使用ARGV[1]

暫無
暫無

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

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