Ruby 实时重定向stdout和stderr

Ruby 实时重定向stdout和stderr,ruby,terminal,command-line-interface,freebsd,csh,Ruby,Terminal,Command Line Interface,Freebsd,Csh,我认为这是一个简单的问题,但找不到解决办法。我将ruby脚本的stdout和stderr重定向到一个日志文件,如下所示: bundle exec rake import:long_task --trace >& log/import.log & 但它似乎没有实时刷新文件中的put,当它遇到异常时,它会将回溯放在顶部的import.log。所以,这不是完美的调试,但它的工作 如何将脚本的输出实时重定向到一个文件中,以查看如果直接在终端中启动脚本而不重定向时所看到的内容 使

我认为这是一个简单的问题,但找不到解决办法。我将ruby脚本的stdout和stderr重定向到一个日志文件,如下所示:

bundle exec rake import:long_task --trace  >& log/import.log &
但它似乎没有实时刷新文件中的
put
,当它遇到异常时,它会将回溯放在顶部的
import.log
。所以,这不是完美的调试,但它的工作

如何将脚本的输出实时重定向到一个文件中,以查看如果直接在终端中启动脚本而不重定向时所看到的内容


使用:Ruby 1.9.2、Rails 3.2、FreeBSD和csh shell。

我不确定我是否完全理解您的问题,但您是否考虑过使用:

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

有关详细信息,请参阅。

我不确定是否完全理解您的问题,但您是否考虑过使用:

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

详细信息请参见。

STDOUT.sync=true
如果您不想每次都刷新
STDOUT.sync=true
如果您不想每次都刷新
。但为什么我们使用puts in终端时,它会自动刷新输出?我的错误是,我认为它与csh有关。但当我们使用puts in终端时,为什么它会自动刷新输出呢?