我遇到以下用于解析命令行选项的代码
的问题#!/usr/bin/env ruby
require 'optparse'
options = {:username=>nil}
optparse = OptionParser.new do|opts|
# Define the options, and what they d
opts.on( "--username", "Cassandra username" ) do |username|
options[:username] = username
end
opts.on( '--password', 'Cassandra password' ) do |password|
options[:password] = password
end
opts.on( '--keyspace', 'Cassandra keyspace' ) do |keyspace|
options[:keyspace] = keyspace
end
end
puts ARGV
optparse.parse!(ARGV)
puts options
当我从命令行运行此代码时
./testopt.rb --username=uuuuu --password=xxxxxx --keyspace=test
我得到以下输出
--username=uuuuu
--password=xxxxxx
--keyspace=test
./testopt.rb:25:in `<main>': needless argument: --username=uuuuu (OptionParser::NeedlessArgument)
缺少什么?
我在ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
提前致谢
答案 0 :(得分:2)
虽然@mudasobwas answer本身并没有错,但您可以通过指定以下示例中的选项进行"option=value"
解析(mmh,仅使用ruby 2.3.1进行测试 )。
关键是使用opts.on('--username=USER',...
与opts.on('--username',...
。
#!/usr/bin/env ruby
require 'optparse'
options = {:username=>nil}
optparse = OptionParser.new do|opts|
# Define the options, and what they do
opts.on( "--username=USER", 'Cassandra username' ) do |username|
options[:username] = username
end
opts.on( '--password=PASSWORD', 'Cassandra password' ) do |password|
options[:password] = password
end
opts.on( '--keyspace=KEY', 'Cassandra keyspace' ) do |keyspace|
options[:keyspace] = keyspace
end
end
puts ARGV
optparse.parse!(ARGV)
puts options
使用此方法,如果没有等号,则不会失去传递值的能力,并将其转换为字符串:
➜ ~ /tmp/op.rb --username myuser
--username
myuser
{:username=>"myuser"}
➜ ~ /tmp/op.rb --username=myuser
--username=myuser
{:username=>"myuser"}
答案 1 :(得分:0)
删除等号。 OptParser
期望arg名称和args之间的空格:
./testopt.rb --username uuuuu --password xxxxxx --keyspace test