2016-11-30 98 views
0

如何将Ruby标准输出存储到多个变量?如何将标准输出存储到多个变量?

举例来说,如果我有:

puts "hello" 

puts "thanks" 

如何存放“你好”和“谢谢”像strVar两个不同的变量(包含值“你好”)和strVar2(包含值“谢谢”)。

在我的脚本中,我打电话给另一个Ruby脚本,它将多个字符串puts标准输出。如何单独存储标准输出中的每个字符串?

+0

你想在变量中捕获你自己的脚本的标准输出? –

+0

@ muistooshort排序的。在我的脚本中,我打电话给另一个ruby脚本,它会将多个字符串放到标准输出中。如何单独存储标准输出中的每个字符串?谢谢。 – 000000000000000000000

+1

尽管我不会推荐它,但[StringIO](http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html)是一条路。看看[这个答案](http://stackoverflow.com/a/14988271/1179430) – GAntoine

回答

0

我不确定我是否理解这个问题,但有无数的方法来存储/打印字符串。很难想象在puts之后的值不是手动输入或以编程方式设置的情况。

您可以使用gets或$ stdin.gets保存输入变量,或将其作为ARGV数组的参数保存。例如:

puts "Enter the first string" 
var0 = $stdin.gets.chomp 

如果您已经值保存

var1 = "hello" 
var2 = "thanks" 
array = [var1, var2] 
hash = {:key1 => var1, :key2 => var2} 


puts var1 
puts var2 
array.each do |str| puts str end 
hash.map do |k, v| puts v end 
+0

谢谢。但是如果我没有保存这些值呢?例如,就我而言,我在脚本中调用另一个脚本,所以我无法控制。其他脚本有很多行,其中字符串放在了杰出的输出中。 – 000000000000000000000

+0

也许你可以使用管道?例如,ruby script1.rb | ruby script2.rb并使用$ stdin.gets获取输出结果?我不认为有一种方法可以同时执行另一个ruby脚本并在脚本2中同时监视$ stdin。还有,如果script1有一个异常会发生什么?这样做的正确方法是使用数据库/ redis/filestore并将值存储在那里:) – whodini9

+0

此外:http://stackoverflow.com/questions/14987362/how-can-i-capture-stdout-to- a-string – whodini9

0

你基本上链应用/脚本一起。有多种方法可以完成,但最简单的路径使用STDIN/STDOUT管道。

一个简单的例子就是使用两个小脚本。保存为test.rb:

puts 'foo' 
puts 'bar' 

并将此作为test2.rb:

v1 = gets.chomp 
v2 = gets.chomp 

puts "v1=#{v1} v2=#{v2}" 

然后,在命令行使用:

ruby test.rb | ruby test2.rb 

其中将输出:

v1=foo v2=bar 

|是我们如何将一个脚本的输出链接到另一个脚本的输入,而不是Ruby的一部分,它是操作系统的一部分。

这是可行的,因为默认情况下,puts向STDOUT写入,gets从STDIN读取。 |将它们连接在一起。

+0

完美的解释!先生,很高兴向您学习。 – 000000000000000000000