- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过运行 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.rb
。 stdout
很可能会在 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/
For 循环和多个变量和条件。 我正在使用 for 循环来设置源索引和目标索引以复制数组中的项目。 for(int src = 0, dst = 8; src = 0; src ++,
我正在尝试创建一个 2 面的 ggplot 对象,并将它们 grid.arrange 在两列中(grid.arrange 列)。在第二列中,在每个分面成员中,我想插入一个直方图。两列的数据源也不同。到
我正在使用 MS VS2010 和一个名为 Deleaker 的插件来发现我可能错过的任何内存泄漏。它告诉我 fopen_s 行有 2 处内存泄漏,但我没有在该行的任何内容上使用 new 或 mall
java.nio.charset.Charset.forName("utf8").decode解码 的字节序列 ED A0 80 ED B0 80 进入 Unicode 代码点: U+10000
我必须国际化 (i18n) 一个 Django 项目。它结合了许多内部 django 应用程序。它已经部分国际化了,即一些字符串是 _(),但有些是空的。一些模板使用 {% blocktrans %}
什么是EDS和 OD ?它们是如何创建和使用的? OD 是如何介于应用程序和 CAN 之间的?界面? 最佳答案 首先你应该读一点关于CANopen的内容熟悉这些概念。检查www.canopen.de您
我正在浏览 Wikipedia/Restrict , 并发现 The compiler can e.g. rearrange the code, first loading all memory lo
我正在 Linux 中编写一个 bourne shell 脚本,我正在使用 ed 将文本附加到文件的末尾。 我必须使用 ed 来完成这项任务。 我需要附加的文字看起来像这样 Modified on:
考虑以下 IL 代码: .method public static void Main() { ldstr "Starts Here" call voi
我有这样的东西: //html Action 1 Action 1 Action 1 ...
考虑使用 malloc 定义的 (char *) 变量 sTmp, 如果我将另一个变量分配给此 sTmp,通过该变量分配的内存是否会自动释放,或者该内存块是否会保持分配(且无用)直到进程结束? 让我用
我定义了一个不透明的结构和相关的 API,如下所示: typedef struct foo foo; foo *create_foo(...); delete_foo(foo *f); 我无法在我的
使用以下伪 Python 脚本将数据发送到本地套接字: s = socket.socket(AF_UNIX, SOCK_STREAM) s.connect("./sock.sock") s.send(
我有一个正方形比例的MKMapView mainMap,它的宽度等于iPhone屏幕宽度。我使用以下方法将其设为圆形: mainMap.layer.cornerRadius = mainMap.fra
假设您要对所有包含模式的文件进行编辑。例如,将所有“2017”更改为“2018”。存在许多针对 perl、sed 和各种其他的建议。如果 ed 编辑器可以工作的话,它会简单得多。 给定一个文件: $
我在 bash 脚本中使用 ed 来搜索文件; / 命令将显示我不想要的内容。我尝试重定向 >/dev/null 2>&1 但这对我不起作用。 文本文件foo.txt: a b c bash 脚本ba
我正在研究 ed 文本编辑器。 要退出输入模式,用户应输入一个句点 (.)。 假设我想以文本形式输入句点。 我想到了一个解决方法:首先,我插入类似.. 的内容。然后,我将 .. 替换为 .. 但我的方
Rust playground : trait FnBox { fn call_box(self: Box); } impl FnBox for F { fn call_box(sel
我们有多个域指向我们的 Tomcat Web 应用程序,它们都由我们的默认 Host 提供服务: 我需要配置哪个 Valve 模式来查看请求已发送到哪个域(即用户在网络浏览器中输入了哪
我做了一个简单的test(jsbin)与: {a:1} //dummy value var a=1; 然后: alert($("#a").text()); 结果是: 但是 - 使用
我是一名优秀的程序员,十分优秀!