Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kernel#gets attempts to read file instead of standard input

Tags:

ruby

I'm rather new to Ruby, and today I wrote an application which you can pass arguments to via ARGV. But inside my application, I want to be able to use "gets". Problem is, every time I try to do so, I get an error.

Here's a simple script which shows my problem:

print "Say something! " input = gets 

If I'd call that like this:

$ ruby script.rb this is arguments 

I get this error:

script.rb:2:in `gets': No such file or directory - this (Errno::ENOENT) from script.rb:2 

Hope someone is able to help me solve this, so I can continue my Ruby journey. :)

Edit: I am aware that "Gets" won't retrieve arguments passed to the file. "Gets" will query the user for input. I want to be able to use both these methods inside my application.

like image 443
Sirupsen Avatar asked Dec 10 '09 20:12

Sirupsen


People also ask

What you mean by kernel?

1 : the inner softer part of a seed, fruit stone, or nut. 2 : the whole grain or seed of a cereal plant a kernel of corn. 3 : a very small amount a kernel of truth.

Why is it called a kernel?

It is the primary interface between the hardware and the processes of a computer. The kernel connects these two in order to adjust resources as effectively as possible. It is named a kernel because it operates inside the OS, just like a seed inside a hard shell.

What is kernel in food?

Kernels are the seeds of cereal grasses. We call the kernels “grain“. The kernels are located at the top of the plant. This area is known as the head of the stalk. We eat the kernel of foods such as corn, wheat, oats, and sorghum.

What is kernel and its functions?

The Kernel is responsible for low-level tasks such as disk management, memory management, task management, etc. It provides an interface between the user and the hardware components of the system. When a process makes a request to the Kernel, then it is called System Call.


2 Answers

If there are arguments, the default gets method tries to treat the first one as a file and read from that. To read from $stdin in such a situation, you have to use it explicitly:

print "Say something! " input = $stdin.gets 
like image 61
Chuck Avatar answered Sep 30 '22 16:09

Chuck


You should be using STDIN.gets not Kernel#gets.

Some reference.

like image 42
Li0liQ Avatar answered Sep 30 '22 17:09

Li0liQ