【发布时间】:2012-01-26 23:24:23
【问题描述】:
- 我正在运行一个依赖于 C 扩展(而不是对系统的调用)的 Ruby gem。
- C 代码多次调用 printf。
- 我想使这些调用的输出静音。
- 更改 Ruby 的 STDOUT (example) 或 STDERR 不会阻止输出文本。
是否可以在不修改 C 代码的情况下做到这一点?如果有,怎么做?
【问题讨论】:
-
我记得过去没能找到办法。
-
运行你的程序时,哪个命令后缀为“2>/dev/null”和“>/dev/null”可以使有问题的
printfs静音?另外,它是哪个扩展名? -
如果在运行
ruby时重定向stdout和stderr还不够,那么gem 中肯定有一些特别的事情发生。我们必须看到消息来源才能知道。他们似乎不太可能直接打开/dev/tty来绕过stdout/stderr,但如果他们没有从ruby 继承stdio,这是我唯一能想到的。 -
@WayneConrad,运行 ruby script.rb >/dev/null 会使输出静音,而 >2/dev/null 不会。
-
@BenJackson,有问题的宝石是 lda-ruby,v. 0.3.8。违规行位于 ext/lda-alpha.c 的第 64 行,它的内容为
printf("alpha maximization : %5.5f %5.5f\n", f, df);。 Grepping 'tty' 和 'dev' 的源代码不会产生任何结果。