38 votes

Kernel#gets tente de lire un fichier au lieu de l'entrée standard

Je suis assez novice en Ruby, et aujourd'hui j'ai écrit une application à laquelle on peut passer des arguments via ARGV. Mais à l'intérieur de mon application, je veux pouvoir utiliser "gets". Le problème est qu'à chaque fois que j'essaie de le faire, j'obtiens une erreur.

Voici un simple script qui illustre mon problème :

print "Say something! "
input = gets

Si je l'appelais ainsi :

$ ruby script.rb this is arguments

J'obtiens cette erreur :

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

J'espère que quelqu'un pourra m'aider à résoudre ce problème, afin que je puisse continuer mon voyage en Ruby :)

Editer : Je sais que "Gets" ne récupère pas les arguments transmis au fichier. La fonction "Gets" interrogera l'utilisateur pour obtenir des données. Je veux pouvoir utiliser ces deux méthodes dans mon application.

80voto

Chuck Points 138930

S'il y a des arguments, l'option par défaut gets essaie de traiter le premier comme un fichier et de lire à partir de celui-ci. Pour lire à partir de $stdin dans une telle situation, vous devez l'utiliser explicitement :

print "Say something! "
input = $stdin.gets

9voto

Li0liQ Points 8104

Vous devez utiliser STDIN.gets n Kernel#gets .

Quelques références .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X