2009-12-10 61 views
38

我对Ruby比较陌生,今天我写了一个应用程序,您可以通过ARGV传递参数。但在我的应用程序中,我希望能够使用“获取”。问题是,每次我尝试这样做,我都会遇到错误。内核#尝试读取文件而不是标准输入

这里有一个简单的脚本,这说明我的问题:

print "Say something! " 
input = gets 

如果我会打电话的是这样的:

$ ruby script.rb this is arguments 

我得到这个错误:

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

希望有人能够帮助我解决这个问题,所以我可以继续我的Ruby旅程。 :)

编辑:我知道“获取”将不会检索传递给该文件的参数。 “获取”将询问用户输入。我希望能够在我的应用程序中使用这两种方法。

回答

80

如果有参数,则默认的gets方法会尝试将第一个视为文件并从中读取。为了从$stdin在这种情况下阅读,你必须明确地使用它:

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

非常感谢。 :) – Sirupsen 2009-12-10 21:43:20

+5

stackoverflow;使我每天都能更好地工作。 – lyonsinbeta 2012-03-26 19:28:22

+0

感谢mucho Chuck。 – welbornio 2014-05-23 22:42:35