私はrubyプログラム(rakeタスク)に別のrakeタスクからの出力を観察させたいと思っています。出力ライターはstderrに出力します。私はそれらの行を読んでみたいです。私はそれを設定するのが難しいです。ruby pipe、IOとstderrリダイレクト
#!/usr/bin/env ruby
puts 'writing...'
while true
$stdout.puts '~'
sleep 1
end
およびそれとエコー(stdin_reader.rb)を読み込み、ファイル:
#!/usr/bin/env ruby
puts 'reading...'
while input = ARGF.gets
puts input
input.each_line do |line|
begin
$stdout.puts "got line #{line}"
rescue Errno::EPIPE
exit(74)
end
end
end
と私が持ってしようとしている私は常に何かを出力ライター(stdout_writer.rb)を持っている場合彼らは一緒に仕事、何も起こりません:
$ ./stdout_writer.rb 2>&1 | ./stdin_reader.rb
$ ./stdout_writer.rb | ./stdin_reader.rb
何を...私はちょうどstdin_reader.rbにエコー場合は、私が手が、私は何を期待:
[email protected]:~/projects/opera_events/sendgrid-example-operaevent$ echo "ok true" | ./stdin_reader.rb
reading...
ok true
got line ok true
[email protected]:~/projects/opera_events/sendgrid-example-operaevent$
stderrがパイプライン化されたスクリプトをセットアップすると、行単位で読むことができますか?追加情報:これはSCRIPT1がメッセージを送信し、スクリプト2は、メッセージが、問題は無限にstdout_writer
実行すると、stdin_reader
を読む機会を得ることは決してないだろうということのようですSCRIPT1