ruby中的相同程序如何接受来自用户的输入以及命令行参数

san*_*ndy 5 ruby

我的ruby脚本从命令行参数获取某些输入.它检查是否缺少任何命令行参数,然后它会提示用户输入.但我无法使用获取来自用户的输入.

示例代码:test.rb

name=""
ARGV.each do|a|
    if a.include?('-n')
        name=a
        puts "Argument: #{a}"
    end
end
if name==""
    puts "enter name:"
    name=gets
    puts name
end
Run Code Online (Sandbox Code Playgroud)

运行脚本: ruby test.rb raghav-k

导致错误:

test.rb:6:in `gets': No such file or directory - raghav-k (Errno::ENOENT)
    from test.rb:6:in `gets'
    from test.rb:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

任何指向这个方向的人都会非常感激谢谢桑迪

rjp*_*rjp 12

gets$stdin如果没有命令行参数,则只会读取真实的(即用户).否则它会将这些参数作为文件连接为虚拟$stdin.

您可以使用STDIN.gets以确保始终使用正确的功能.

您也可以随时删除参数ARGV(或一次性删除它们),您gets应该正常工作.

  • +1绝对是一种非直观的行为!我刚刚发现从stdin读取的正确方法是`$ stdin.gets` (3认同)
  • 是的,这是强制它从`$ stdin`读取的明确方式(我认为这可能会避免你的论证问题.) (2认同)