2017-02-15 4 views
0

私は靴のライブラリを使ってルビコードを実行しており、ファイル入力として実行しているRubyコードを処理しているので、STDINをもう使用できないことを発見しました(ARGFはファイル入力またはSTDINを許可しています両方ではない)。ARGFからファイル入力とSTDINの両方を取得していますか?

これをオーバーライドする方法はありますか?私はperlと言っています。例えば、IOバッファが空になったらSTDINから読み込むことができます。

編集:

私はといくつかの成功を持っていた「 - 」明らかに、コマンドラインでSTDINに切り替える信号である特別なファイル名の文字を、。

前の質問:シューズARGFが壊れていますか?

一般的なRubyを使用して、ファイルまたはStandard InをARGFで読み取ることができます。靴では、私はファイルを読むことしかできません。単に標準からのものは無視されます。それは標準で食べているのですか、それにアクセスする別の方法がありますか?

コード行の例:ルビーファイルに単独で、または靴の靴アプリ内に単独で使用できます。

#ruby testargf.rb aus.txt is the same as ruby testargf.rb<aus.txt 
#but isn't in shoes. shoes only prints with the first input, not the second 
ARGF.each do |line| #readLine.each has same result 
    puts line 
end 

や靴で

#shoes testargfshoes.rb aus.txt should be the same as <aus.txt but isn't. 
Shoes.app(title: "File I/0 test",width:800,height:650) do 
    ARGF.each do |line| #readLine.each has same result 
     puts line 
     para line 
    end 
end 

振り返ってみると、私はまた、靴とRubyの間にさらに差を見ています。また、任意と一緒に、私が実行しているプログラムのソースコードを出力シューズ私が渡すファイル標準入力にファイルを入力しようとすると、ソースコードのみが出力されます。

これは、靴アプリが自分のプログラムを入力として受け取り、それを自分のコードに渡すときに入力を墨塗りしない(または正しい単語があればどんなものでもない)ことを意味します。これは明らかに何かのために標準Inを使用しているので、私の "Shoes Inats Standard In"仮説を強化するようです。私はそれが行の2つのファイルを取ることができますね、しかし、その後はない一つのファイルと内標準を参照する

私は私がファイル入力とSTDINを混ぜる場合は靴なしでRubyが同じ動作を提供していることを確認することができます。

ruby testargf.rb aus_simple.txt < testargf.rb 
+1

実行可能な例を教えてください。 – Stefan

+0

はい。編集された質問を参照してください。 – Jenny

+0

'do'の後ろにスペースがあり、2つのスペースを使ってインデントしてください。 –

答えて

0

" - "特殊なファイル名文字で成功しましたが、これは明らかにコマンドラインでSTDINに切り替えるシグナルです。使用の

例:

shoes testargfshoes.rb - <aus_simple.txt 

が通過しないでください " - " 任意の標準Inを通過することなく、それがハングアップすることができます。

ここで答えが見つかりました:https://robots.thoughtbot.com/rubys-argf

関連する問題