[英]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!
在命令行中使用標志時,實際上是將變量設置為true
或false
。 例如,默認情況下,對於大多數操作(如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.