Перенаправление stdout и stderr в режиме реального времени

Я думаю, что это простой вопрос, но не смог найти решение. Я перенаправляю stdout и stderr скрипта ruby, выполняющего «пути», а иногда и ошибки (!) в файл журнала, подобный этому:

bundle exec rake import:long_task --trace  >& log/import.log &

Но, похоже, он не сбрасывает puts в файл в реальном времени, и когда он получает исключение, он помещает трассировку в верхний import.log. Итак, это не идеально для отладки, но это работает.

Как я могу перенаправить вывод скрипта в реальном времени в файл, чтобы увидеть именно то, что я бы увидел, если бы запустил его прямо в терминале без перенаправления?

Использование: Ruby 1.9.2, Rails 3.2, FreeBSD и оболочка csh.


person Hartator    schedule 13.03.2012    source источник


Ответы (2)


STDOUT.sync = true если не хотите flush каждый раз

person Victor Moroz    schedule 13.03.2012

Я не уверен, что полностью понимаю ваш вопрос, но рассматривали ли вы возможность использования:

$stdout.puts "something on /dev/stdout"
$stdout.flush
$stderr.puts "something on /dev/stderr"
$stderr.flush

См. документацию по IO#flush. подробности.

person awendt    schedule 13.03.2012
comment
моя ошибка, я думал, что это связано с csh. Но почему он автоматически сбрасывает вывод, когда мы используем ввод в терминал? - person Hartator; 13.03.2012