使用 Ruby 从命令行参数中提取文件名

发布于 2024-07-16 08:46:38 字数 671 浏览 2 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

神爱温柔 2024-07-23 08:46:38

“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.

儭儭莪哋寶赑 2024-07-23 08:46:38

我不能只使用 ARGV.pop。 例如
当最后一个参数是“css”时
可以是一个文件或属于
--类型开关。

但是,如果您的脚本要求最后一个参数是文件名(这是您的使用输出查询的内容),则这种情况永远不会发生,脚本应该以非零值退出,并且用户应该得到使用报告或错误。

现在,如果您想创建默认文件名,或者不需要文件名作为最后一个参数,但将其保留为可选,那么您可以测试最后一个参数是否是有效文件。 如果是这样,请按预期使用它,否则继续,无需等。

I can't just use ARGV.pop. For example
when the last argument is "css" it
could either be a file or belong to
--type switch.

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.

少女的英雄梦 2024-07-23 08:46:38

希望这个答案仍然有用。

Ruby 有一个内置变量__FILE__可以完成此类工作。

puts __FILE__

它会打印出您的文件名。

Hope this answer can still be useful.

Ruby has one built-in variable __FILE__ can do this type of work.

puts __FILE__

it will print out your file's name.

怎樣才叫好 2024-07-23 08:46:38

我不认为在将其发送到 OptionParser 之前提取它是不好的,我认为这是有道理的。 我这么说可能是因为我以前从未使用过 OptionParser ,但是哦,好吧。

require 'optparse'

file = ARGV.pop
opts = OptionParser.new do |opts|
  # ...
end

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.

require 'optparse'

file = ARGV.pop
opts = OptionParser.new do |opts|
  # ...
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文