2011-07-06 57 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'將從你的字符串中讀取,而不是詢問用戶。 –