当将文件名作为参数传递给Ruby脚本时,为什么OptionParser读取文件的内容而不是名称?

2ic8powd  于 2023-11-18  发布在  Ruby
关注(0)|答案(2)|浏览(111)

我正在编写一个与GitHub环境交互的脚本。对于某些用例,我需要将脚本的范围限制为用户列表,并将其存储在一个换行符分隔的文件中。我希望将用户列表的 filename 作为参数传递给脚本,并将文件名的字符串存储在一个变量中,然后在脚本中使用该变量通过其文件名打开/处理用户列表文件。
我的问题是严格地正确输入和存储文件名。假设用户列表在一个名为“user-list”的文件中,它包含以下文本:

user1
user2
user3

字符串
我想把文件名(“user-list”)存储在一个变量中,但我实际上存储的是一个用户列表([“user 1”,“user 2”,“user 3”])。
我觉得我在这里遗漏了一些非常明显的东西,但是我在documentation for OptionParser或其他Ruby文档中找不到任何相关的东西。我也是一个相当新的Ruby用户,正在使用现有的代码库,所以如果有更好的方法来做到这一点,我还不知道。
下面是我正在使用的代码片段:

# Initialize options OpenStruct
options = OpenStruct.new

...

# Parse arguments
option_parser = OptionParser.new do |opts|

...

    opts.on("-u", "--user-file USER_FILE", String,
        "Read users from a file. File should be newline separated.") do |user_file|
        # FIXME: This doesn't work
        # Check if the file exists
        #unless File.exist?(user_file)
        #    puts "File not found: #{user_file}"
        #    exit
        #end
        options.user_file = user_file
        
        # FIXME: Testing what was stored
        puts options.user_file
    end

...

option_parser.parse!(ARGV)


下面是我传递到脚本中的内容:

./my_script -u user-file


文件“user-file”存在,其内容为:

user1
user2
user3


我试图将字符串“user-file”存储在变量user_file中,但实际上我存储的是列表[“user 1”,“user 2”,“user 3”]。

62o28rlo

62o28rlo1#

这就是你提到的代码,它对我有效。

require 'optparse'
require 'ostruct'

options = OpenStruct.new

option_parser = OptionParser.new do |opts|
  opts.on('-u', '--user-file USER_FILE', String,
          'Read users from a file. File should be newline separated.') do |user_file|
    options.user_file = user_file
    puts options.user_file
  end
end
option_parser.parse!(ARGV)

字符串

o75abkj4

o75abkj42#

经过进一步的挖掘,我发现我的问题与OptionParser或Ruby无关,问题实际上是由一个 Package 器脚本评估的文件。

相关问题