我正在尝试使用optparse来解析命令行参数。我希望我的程序接受这样的论点:
$ ./myscript.rb [options] filename
我可以轻松管理[options]
部分:
require 'optparse'
options = { :verbose => false, :type => :html }
opts = OptionParser.new do |opts|
opts.on('-v', '--verbose') do
options[:verbose] = true
end
opts.on('-t', '--type', [:html, :css]) do |type|
options[:type] = type
end
end
opts.parse!(ARGV)
但是如何获得filename
?
我可以从ARGV
手动提取它,但必须有一个更好的解决方案,只是无法弄清楚如何
答案 0 :(得分:4)
“parse”方法返回未处理的ARGV。因此,在您的示例中,它将返回一个包含文件名的单元素数组。
答案 1 :(得分:1)
我不能只使用ARGV.pop。例如 当最后一个参数是“css”时 可以是文件或属于 - type switch。
但是如果你的脚本要求最后一个参数是一个文件名(这是你的使用输出查询的那个),那么这种情况永远不会发生,脚本应该以非零退出,并且用户应该得到使用报告或错误。< / p>
现在,如果你想创建一个默认文件名或者不需要文件名作为最后一个参数但保留它是可选的,那么你可以测试一下,看看最后一个参数是否是一个有效的文件。如果是这样,按预期使用它,否则继续没有等等。
答案 2 :(得分:0)
希望这个答案仍然有用。
Ruby有一个built-in
变量__FILE__
可以完成这种工作。
puts __FILE__
它将打印出文件名。
答案 3 :(得分:-1)
我认为在将它发送到OptionParser之前将其解压缩是不好的,我认为这是有道理的。我可能会说这是因为我之前从未使用过OptionParser
,但是很好。
require 'optparse'
file = ARGV.pop
opts = OptionParser.new do |opts|
# ...
end