2016-11-30 96 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