Использование gets() дает ошибку "Нет такого файла или каталога" при передаче аргументов в мой script
Привет, я делаю простой ruby script, где я делаю форму с помощью gets.chomp
и аргументов, проблема в том, что когда gets.chomp
использует script, мне возвращается ошибка, когда я применяю аргумент test
.
Код:
#!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>'
Может ли кто-нибудь помочь?
Ответы
Ответ 1
Похоже, вы хотите, чтобы пользователь вводил какой-либо ввод, читая строку из STDIN
, лучший способ сделать это - вызвать STDIN.gets
, а не gets
. Таким образом, ваша строка будет выглядеть следующим образом:
word = STDIN.gets.chomp
Это задокументировано как IO.gets
. STDIN
- это экземпляр IO
.
Сейчас вы выполняете Kernel.gets
, что делает что-то другое (внимание мое):
Возвращает (и присваивает $_) следующую строку из списка файлов в ARGV (или $*) или со стандартного ввода, если файлы не присутствуют в командной строке.
Кажется, что он ведет себя как STDIN.gets
, если ARGV
пуст, но это не одно и то же, поэтому путаница.
Ответ 2
Если ваша программа обрабатывает пустой аргумент или непустой аргумент. Вы можете использовать этот модуль (особенно если вы уже используете по умолчанию 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