Ruby 使用gets()可以给出;没有这样的文件或目录;向脚本传递参数时出错
大家好,我正在制作一个简单的ruby脚本,我使用Ruby 使用gets()可以给出;没有这样的文件或目录;向脚本传递参数时出错,ruby,Ruby,大家好,我正在制作一个简单的ruby脚本,我使用gets.chomp和参数制作表单,问题是当gets.chomp使用时,当我应用参数test时,脚本会返回一个错误 守则: #!usr/bin/ruby def formulario(quien) while (1) print "[+] Word : " word = gets.chomp print quien + " -> " + word end end quien
gets.chomp
和参数制作表单,问题是当gets.chomp
使用时,当我应用参数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>'
[+]Word:C:/Users/test/test.rb:8:in`gets':没有这样的文件或目录@rb\u sysopen-test(Errno::E)
(不适用)
来自C:/Users/test/test.rb:8:in'get'
来自C:/Users/test/test.rb:8:in'formulario'
来自C:/Users/test/test.rb:17:in`'
有人能帮忙吗?看起来您想让用户通过读取
STDIN
中的一行来键入一些输入,最好的方法是调用STDIN.get
而不是get
。因此,您的线路变成:
word = STDIN.gets.chomp
这记录为STDIN
是IO
的一个实例
现在,你正在执行,它做了一些不同的事情(我的重点):
从ARGV(或$*)中的文件列表返回下一行(并将其分配给$);如果命令行中没有文件,则从标准输入返回下一行
如果
ARGV
为空,则它的行为类似于STDIN.get
,但不是同一事物,因此会产生混淆。如果程序处理空参数或非空参数。您可以使用此模块(特别是如果您已经在任何地方使用默认的get
)
然后你可以把它包括在你的课堂上
require 'input_helper'
class YourClass
...
include InputHelper
...
end
与您的问题无关,但是
#!usr/bin/ruby
缺少一个前导的/
;它应该是#/usr/bin/ruby
。。。但是,这仅适用于UNIX和类UNIX系统,并不是真正用于Windows(CygWin除外),因此,STDIN.get
是不必要的。@我遇到了完全相同的错误,指定STDIN
对我有效。我可以确认使用STDIN.get也解决了同样的问题。谢谢。意外的便利可能导致陌生的地方。我觉得这种行为很奇怪,但如果我习惯了,我可能会觉得它很方便。奇怪的是,我不知道ARGV
会干扰。get
;这个答案对我也有用
require 'input_helper'
class YourClass
...
include InputHelper
...
end