2011-07-06 5 views
0

getsが呼び出されたときは、ウィンドウに手動で入力するのではなく、スクリプト自体で入力する方法はありますか?例えばruby​​のスクリプトを使って関数を取得する入力を入力する方法

getsが呼び出された上記のスクリプトで

puts "enter your choice" 
ch=gets       
puts ch 

、ウィンドウ内のスクリプトを介して、その入力を入力する任意のコマンドはありますか?

ありがとうございます。

+0

同じプログラムか別のプログラムか? – Dogbert

答えて

1

1)あなたはSTDINへの外部からの入力を提供したい場合は、スクリプトを呼び出すときに

はのは、あなたの取得するコマンドがprog.rb.という名前のファイル内にあるとしましょう

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

この意志出力

enter your choice 
My input to gets 

シェルで:あなたはprog.rbを実行する際にSTDINにいくつかの固定入力を提供したい場合は、コマンドラインからのパイプを使用して、それを実行することができ手動による介入を必要としません。

2)同じスクリプト内からSTDINを供給するための例:

class MyIO 
    def gets 
    "1\n" 
    end 
end 

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

はWindows上で作業しているので、いくつかのステップを実行した後にrubyスクリプトを実行すると、選択肢を入力するように要求されます。 – madhu

+0

申し訳ありませんが、上記のコメントは不完全です。窓の上で作業しているので、Rubyスクリプトを実行しているときにいくつかのステップを実行した後に、選択肢を入力するよう求められます。例:puts "choice your choice" choice =取得します。ユーザーに質問をせずに、スクリプト自体を介して常に値1を入力したいという選択肢を入力するように求めます。私は、このスクリプトを使っていくつかの変数を介してスクリプトがすでに実行されているときにこの入力を提供したいと思います。 – madhu

+0

@madhu:WindowsはおそらくMyIO#が "1 \ r \ n"を返すように要求します。私はこれを確認することはできません、私は今のところWindowsマシンがありません。 – emboss

1

gets機能は、単にので、あなたがしなければならないすべては読書のための新しいFileStringIOを開き、それを割り当てるある$stdinから読み込みます$stdin。例えば

、あなたがpancakes.txtというファイルがあり、これを行う場合:

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

次にあなたが標準出力にpancakes.txtの最初の行が表示されます。

+0

私はWindows上で作業しているので、いくつかのステップを実行した後にルビスクリプトを実行しているときに、選択肢を入力するように要求されます。例:puts "choice your choice" choice = gets、ユーザーに質問をせずに、スクリプト自体を介して常に値1を入力したいという選択肢をユーザーが入力するように求めます。私は、このスクリプトを使っていくつかの変数を介してスクリプトがすでに実行されているときにこの入力を提供したいと思います。 – madhu

+0

@ madhu:次に、希望の応答(改行で区切られた)でStringIOをインスタンス化し、それを '$ stdin'に割り当てます。その後、 'gets'はユーザに尋ねる代わりに文字列から読み込みます。 –

関連する問題