gpt4 book ai didi

ruby - 从 Ruby fork/exec-ed 时不输出 Thin

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:37 24 4
gpt4 key购买 nike

我正在尝试通过运行 fork/exec 在子进程中运行 thin start 2>&1,并且我正在重新分配 STDOUT到管道,这样我就可以通过管道输出。

但是,当 Thin 成功启动时,我没有得到任何输出。当它出错时,我得到的输出顺序错误——首先是错误文本,然后是标准的 Thin 启动消息。

我从 Foreman 那里复制了代码,它可以正确处理这个问题。知道发生了什么事吗?

代码:

reader, writer = IO.pipe
pid = fork do
Process.setpgrp
trap("INT", "IGNORE")
$stdout.reopen writer
reader.close
exec("thin start 2>&1")
end
Process.detach pid
until reader.eof?
puts reader.gets
end

最佳答案

发送到 $stdout 的数据不会立即打印出来——它会被缓冲。另一方面,$stderr 没有缓冲,当你写入它时你会立即看到结果。让我们看一个最小的例子。

STDOUT.puts :stdout
STDERR.puts :stderr

将其保存为test.rb并将thin start替换为ruby test.rbstdout 很可能会在 stderr 之后打印。为了修复它,我们必须使用 IO#sync=方法

STDOUT.sync = true
STDOUT.puts :stdout
STDERR.puts :stderr

现在 stdout 将被同步打印,就像 stderr 一样,打印字符串的结果顺序应该是直观的。

您的子 Thin 进程最初缺少输出可能是因为该子进程未将数据刷新到 STDOUT。写入 STDERR 的第一条数据会导致 STDOUT 刷新。尝试在应用程序或 Thin 的源代码中的某处添加 STDOUT.sync = true,看看是否有帮助。

另请参阅 ruby​​-forum.com 上标题为 capture output in real time 的讨论.

关于ruby - 从 Ruby fork/exec-ed 时不输出 Thin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com