将进程中的标准输出复制到标准输出和文件的最佳方法是什么?
当我执行 $stdout.puts "foo"
时,我希望它同时转到 stdout 和文件。
我想出:
def log_init
$stdout.sync = true
old_out = $stdout.dup
old_out.sync = true
r, w = IO.pipe
$stdout.reopen(w)
fork do
f = File.open('/tmp/test', 'a') do |f|
f.sync = true
while (sel = IO.select([r], [], [], 1000))
readfds, *rest = sel
data = readfds.first.readpartial(1024)
old_out.write(data)
f.write(data)
end
end
end
end
你能在不需要第二个过程的情况下做到这一点吗?
When I do $stdout.puts "foo"
, I want it to go to both stdout and to a file.
I came up with:
def log_init
$stdout.sync = true
old_out = $stdout.dup
old_out.sync = true
r, w = IO.pipe
$stdout.reopen(w)
fork do
f = File.open('/tmp/test', 'a') do |f|
f.sync = true
while (sel = IO.select([r], [], [], 1000))
readfds, *rest = sel
data = readfds.first.readpartial(1024)
old_out.write(data)
f.write(data)
end
end
end
end
Can you do this without requiring a second process?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需从 shell 中执行即可:
Just do it from the shell:
我认为 Ruby 邮件列表中的这篇文章/线程可能会对您有所帮助: http://www .ruby-forum.com/topic/102759#226506
特别是这段代码:
I think this post/thread from the Ruby mailing list may help you along: http://www.ruby-forum.com/topic/102759#226506
In particular this piece of code: