使用 Ruby 从命令行参数中提取文件名
我正在尝试使用 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)
但是如何获取文件名
?
我可以从 ARGV
手动提取它,但必须有更好的解决方案,只是不知道如何
I'm trying to use optparse to parse command line arguments. I would like my program to accept arguments like that:
$ ./myscript.rb [options] filename
I can easily manage the [options]
part:
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)
But how do I get the filename
?
I could extract it manually from ARGV
, but there has to be a better solution, just can't figure out how
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
“parse”方法返回未处理的ARGV。 因此,在您的示例中,它将返回一个包含文件名的单元素数组。
The "parse" method returns the unprocessed ARGV. So in your example, it will return a one element array with the filename in it.
但是,如果您的脚本要求最后一个参数是文件名(这是您的使用输出查询的内容),则这种情况永远不会发生,脚本应该以非零值退出,并且用户应该得到使用报告或错误。
现在,如果您想创建默认文件名,或者不需要文件名作为最后一个参数,但将其保留为可选,那么您可以测试最后一个参数是否是有效文件。 如果是这样,请按预期使用它,否则继续,无需等。
But if your script requires the last argument to be a filename (which is what your usage output inquires) this case should never happen the script should exit with a non-zero and the user should get a usage report or error.
Now if you want to make a default filename or not require a filename as the last argument but leave it optional then you could just test to see if the last argument is a valid file. If so use it as expected otherwise continue without etc.
希望这个答案仍然有用。
Ruby 有一个
内置
变量__FILE__
可以完成此类工作。它会打印出您的文件名。
Hope this answer can still be useful.
Ruby has one
built-in
variable__FILE__
can do this type of work.it will print out your file's name.
我不认为在将其发送到 OptionParser 之前提取它是不好的,我认为这是有道理的。 我这么说可能是因为我以前从未使用过 OptionParser ,但是哦,好吧。
I don't think extracting it before sending it to OptionParser is bad, I think it makes sense. I probably say this because I have never used
OptionParser
before, but oh well.