是否可以在不修改C代码的情况下执行此操作?如果是这样,怎么样?
答案 0 :(得分:4)
有人最初评论我的帖子建议使用IO.reopen。这对我有用。不幸的是,这个人删除了他/她的评论,所以我发布了我最后使用的更详细的功能:
def silence_stdout(log = '/dev/null')
old = $stdout.dup
$stdout.reopen(File.new(log, 'w'))
yield
$stdout = old
end
用法:
silence_stdout { foo } # Won't be displayed, won't be logged.
silence_stdout('log.txt') { bar } # Won't be displayed, logged in log.txt.
答案 1 :(得分:0)
如果您有权访问C源代码:
#define printf(...)
此宏窗体是C99可变参数宏。
答案 2 :(得分:0)
Ruby可能会打印到stderr
而不是stdout
,这就是为什么更改Ruby的stdout
无法解决您的问题。
(stderr
和stdout
通常都会转到控制台。)
尝试重定向stderr
。我记得它是:myprogram 2> /dev/null