У меня есть следующий тест на Ruby скрипт:Проблема Перенаправление стандартный вывод в Ruby, сценарий
require 'tempfile'
tempfile = Tempfile.new 'test'
$stderr.reopen tempfile
$stdout.reopen tempfile
puts 'test stdout'
warn 'test stderr'
`mail -s 'test' [email protected] < #{tempfile.path}`
tempfile.close
tempfile.unlink
$stderr.reopen STDERR
$stdout.reopen STDOUT
электронной почты, который я получаю имеет содержание:
test stderr
Почему STDERR переадресацией правильно, но не стандартный вывод?
Edit: В ответ на комментарий я добавил $stdout.flush
после puts
линии и распечатана правильно. Поэтому я повторю свой вопрос: что происходит и почему флеш исправляет это?
Что происходит, когда вы переключаете порядок предупреждения и помещает? –
Ничего не происходит, когда я переключаю порядок 'warn' и' puts'. @mu: я изменил 'mail' на' cat' точно так же, как вы написали, и я до сих пор не печатаю stdout. Я использую Ruby Enterprise Edition 2011.01 на CentOS Linux. – jrdioko
@mu: Смотрите мое редактирование. – jrdioko