使用gets()给出"没有这样的文件或目录"将参数传递给我的脚本时出错

时间:2014-12-12 23:11:04

标签: ruby

您好我正在制作一个简单的ruby脚本,我使用gets.chomp和参数创建表单,问题是当gets.chomp使用脚本时,当我应用参数时test返回错误{{ 1}}。

代码:

#!usr/bin/ruby

def formulario(quien)
    while (1)
        print "[+] Word : "
        word = gets.chomp
        print quien + " -> " + word
    end
end

quien = ARGV[0]

formulario(quien)

错误:

[+] Word : C:/Users/test/test.rb:8:in `gets': No such file or directory @ rb_sysopen - test (Errno::E
NOENT)
        from C:/Users/test/test.rb:8:in `gets'
        from C:/Users/test/test.rb:8:in `formulario'
        from C:/Users/test/test.rb:17:in `<main>'

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:75)

看起来您希望用户通过阅读STDIN中的一行来输入一些输入,最好的方法是调用STDIN.gets而不是gets。所以你的行变成了:

word = STDIN.gets.chomp

记录为IO.getsSTDINIO的实例。

现在,您正在执行Kernel.gets,这会做一些不同的事情(强调我的):

  

从ARGV (或$ *)中的文件列表中返回(并指定$ _)下一行,如果没有文件,则从标准输入返回 在命令行上。

如果STDIN.gets为空,则此显示为,表现得像ARGV,但不是同一回事,因此会产生混淆。

答案 1 :(得分:0)

如果程序处理空参数或非空参数。您可以使用此模块(特别是如果您已经在所有地方使用默认的gets

# A module that help to use method gets no matter what the file argument is
module InputHelper
    # Handle input method based on its file argument
    def gets
        if ARGV.nil?
            Kernel.gets
        else
            STDIN.gets
        end
    end
end

然后您可以将其包含在您的课程中

require 'input_helper'
class YourClass
    ...
    include InputHelper
    ...
end