我正在通过 FFI 访问 Ruby 中的 C 函数。该函数称为 AllocTilts::summary
。
我希望该方法不向 STDOUT 打印任何内容。但是,我对 STDOUT 的临时重定向不起作用。还有什么我可以做的吗?
puts 'test outside before' #prints successfully
File.open("/var/alloc_tilts/summary_dump", "w") do |out|
stdout, $stdout = $stdout, out
puts 'test inside' #doesn't print to STDOUT as expected
AllocTilts.summary(2012, 2011) #prints undesired stuff to STDOUT
$stdout = stdout
end
puts 'test outside after' #prints successfully
最佳答案
AllocTilts.summary
如何写入标准输出?如果它使用 printf
而您无权访问其源代码,则您无能为力(除了调用 libc dup
)。
ruby 写入 $stdout
而不是真正的 stdout 的方式是
# from io.c
rb_funcall2(rb_stdout, rb_intern("puts"), argc, argv);
您应该使用类似的代码在 AllocTilts.summary
中生成输出。
关于ruby - 如何更改 Ruby 中 FFI 调用的 STDOUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138964/