gpt4 book ai didi

ruby - 解析 Ruby 脚本中的命令行参数

转载 作者:数据小太阳 更新时间:2023-10-29 06:22:04 25 4
gpt4 key购买 nike

我想从命令行调用 Ruby 脚本,并传入键/值对参数。

命令行调用:

$ ruby my_script.rb --first_name=donald --last_name=knuth

我的脚本.rb:

puts args.first_name + args.last_name

执行此操作的标准 Ruby 方法是什么?在其他语言中,我通常必须使用选项解析器。在 Ruby 中,我看到我们有 ARGF.read,但这似乎无法像本例中的键/值对那样工作。

OptionParser看起来很有希望,但我不知道它是否真的支持这种情况。

最佳答案

Ruby 的内置 OptionParser做得很好。结合 OpenStruct然后你就可以自由回家了:

require 'optparse'

options = {}
OptionParser.new do |opt|
opt.on('--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!

puts options

options 将以散列形式包含参数和值。

在不带参数的命令行中保存并运行它会导致:

$ ruby test.rb
{}

带参数运行:

$ ruby test.rb --first_name=foo --last_name=bar
{:first_name=>"foo", :last_name=>"bar"}

该示例使用散列来包含选项,但您可以使用 OpenStruct,这将导致与您的请求类似的用法:

require 'optparse'
require 'ostruct'

options = OpenStruct.new
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options.first_name = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options.last_name = o }
end.parse!

puts options.first_name + ' ' + options.last_name

$ ruby test.rb --first_name=foo --last_name=bar
foo bar

它甚至会自动创建您的 -h--help 选项:

$ ruby test.rb -h
Usage: test [options]
--first_name FIRSTNAME
--last_name LASTNAME

你也可以使用短标志:

require 'optparse'

options = {}
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!

puts options

按照它的节奏运行:

$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME
-l, --last_name LASTNAME
$ ruby test.rb -f foo --l bar
{:first_name=>"foo", :last_name=>"bar"}

为选项添加内联解释也很容易:

OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options[:last_name] = o }
end.parse!

和:

$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME The first name
-l, --last_name LASTNAME The last name

OptionParser 还支持将参数转换为类型,例如 Integer 或 Array。有关更多示例和信息,请参阅文档。

您还应该查看右侧的相关问题列表:

关于ruby - 解析 Ruby 脚本中的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com