Ami*_*eli 3 ruby command-line-interface optparse
我在解析命令行选项时遇到以下代码问题
#!/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
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行此代码时
./testopt.rb --username=uuuuu --password=xxxxxx --keyspace=test
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
--username=uuuuu
--password=xxxxxx
--keyspace=test
./testopt.rb:25:in `<main>': needless argument: --username=uuuuu (OptionParser::NeedlessArgument)
Run Code Online (Sandbox Code Playgroud)
缺少什么?我在ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
提前致谢
尽管@mudasobwas 的答案本身并没有错,但您可以"option=value"通过指定如下示例中的选项来进行解析(嗯,仅使用 ruby 2.3.1 测试)。
关键是使用opts.on('--username=USER',...vs. 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
Run Code Online (Sandbox Code Playgroud)
您不会失去使用这种方法传递没有等号的值并将其转换为字符串的能力:
? ~ /tmp/op.rb --username myuser
--username
myuser
{:username=>"myuser"}
? ~ /tmp/op.rb --username=myuser
--username=myuser
{:username=>"myuser"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |