2011-07-06 50 views
0

每当调用gets时,是否有任何方法通过脚本本身输入输入,而不是在Windows中手动输入?如何通过红宝石脚本输入获取函数

例如:

puts "enter your choice" 
ch=gets       
puts ch 

在上述脚本时gets被调用时,是否有任何命令经由窗口脚本来输入输入到?

在此先感谢。

+0

从同一个程序或另一个? – Dogbert

回答

1

1)如果你想提供外部输入STDIN调用脚本时

比方说,你得到的命令是一个文件名为prog.rb.内

echo "My input to gets" | ruby prog.rb 

这将输出

enter your choice 
My input to gets 

在shell:如果您想运行prog.rb时提供一些固定的输入STDIN,你可以使用管道从命令行运行无需人工干预。

2)从同一脚本中喂养STDIN一个例子:从$stdin

class MyIO 
    def gets 
    "1\n" 
    end 
end 

$stdin = MyIO.new 
puts "enter your choice" 
ch=gets       
puts ch # => 1 
+0

上午在Windows上工作,所以我有一个要求,如果在执行几个步骤后运行红宝石脚本,它会要求输入选择, – madhu

+0

对不起,上述评论是不完整的,所以我在这里写。我在Windows上工作,所以我有一个要求,如果在执行几个步骤后运行ruby脚本,它会要求输入选择,例如:puts“输入您的选择”选项=获取,所以在选择=获取行脚本将要求用户输入选择,我想通过脚本本身始终输入值“1”,而不询问用户。我想在脚本已经运行时通过脚本通过一些变量来提供这个输入。 – madhu

+0

@madhu:Windows可能会要求MyIO#返回“1 \ r \ n”。我无法证实这一点,我现在没有Windows机器。 – emboss

1

gets功能只是读取因此,所有你需要做的就是打开一个新的FileStringIO阅读,然后分配给它到$stdin

例如,如果您有一个名为pancakes.txt文件,你这样做:

$stdin = File.new('pancakes.txt', 'r') 
puts gets 

然后你就会看到在标准输出的pancakes.txt第一线。

+0

在Windows上工作,所以我有一个要求,当我在执行几个步骤后运行ruby脚本时,它会要求输入选择,例如:puts“输入您的选择”选择=获取,所以在选择=获取行脚本将要求用户输入选择,我一直想通过脚本本身输入值“1”,而不询问用户。我想在脚本已经运行时通过脚本通过一些变量来提供这个输入。 – madhu

+0

@madhu:然后用所需的响应实例化一个StringIO(用换行符分隔)并将其分配给'$ stdin'。然后'gets'将从你的字符串中读取,而不是询问用户。 –