1

我编写了一个 ruby​​ 脚本,然后调用另一个 ruby​​ 脚本。被调用者脚本很长,并且有很多“获取”输入。

所以我要做的是打开我的 unix 终端,调用调用者脚本,然后它会执行以下简单的操作:

load "calleeScript.rb"

calleeScript.rb 已被简化为仅执行此操作:

input = gets.chomp

print input

但它只是给了我一个错误,就像它无法处理获取一样。错误说:

./getsTest.rb:3:in `gets': 没有这样的文件或目录 - 5 (Errno::ENOENT) from ./getsTest.rb:3

即使我取出它也不会打印/放入终端。所以知道我如何调用一个脚本然后调用另一个脚本(放弃完全控制或分叉),做一些输入/输出,然后仍然返回到前一个脚本吗?

4

1 回答 1

4

Kernel#gets是一种方便的方法,允许您通过标准输入和文件处理输入。

如果您在没有任何参数的情况下调用脚本,例如:

getsTest.rb

然后Kernel#gets从标准输入读取它的输入。但是,如果您这样调用脚本:

getsTest.rb foo.txt

然后Kernel#gets从名为foo.txt.

在您的情况下,Kernel#gets抱怨它找不到名为 的文件5,所以大概您将脚本称为如下:

getsTest.rb 5

如果您想从某个特定来源阅读,您应该调用IO#gets该特定来源。我建议打电话

$stdin.gets

注意:从技术上讲,这不是魔术常数的特征,Kernel#gets而是ARGF魔术常数的特征。基本上,Kernel#gets只需调用ARGF.gets.

于 2012-06-07T23:51:24.703 回答