我在mac上有一个控制台应用程序,通过NSLog输出错误代码。如何在ruby中运行控制台应用程序时捕获NSLog的结果?
我尝试过像redirecting stderr这样的方法,但这似乎没有办法。
好的,我会将其编辑为清晰明白。
我有一个为MacOS编写的程序,目前通过NSLog报告其输出。出于所有意图和目的,它可以在main.m
文件中包含此行:
NSLog(@"Hello world!");
我想捕获那个NSLog的内容。我无法更改程序本身,我只是拥有日志文件。我想在Ruby中进行一些基于rspec的测试。
现在,我无法使用重定向。任何类型的重定向,如:
@output = `#{theProgramToTest}`
puts @output
导致无输出。如果我按照我之前链接的问题所描述的那样重定向stderr,我仍然没有结果。那么如何捕获程序的结果呢?我不想将它们重定向到文件。
答案 0 :(得分:0)
也许这会有所帮助:
require 'stringio'
str_stdout, str_stderr = (1..2).map{ StringIO.new }
puts "redirecting outputs"
old_stdout, old_stderr = $stdout, $stderr
$stdout, $stderr = str_stdout, str_stderr
STDOUT.puts "This is written to the old STDOUT"
STDERR.puts "This is written to the old STDERR"
$stdout.puts "This is written to str_stdout"
$stderr.puts "This is written to str_stderr"
puts 'this is output via "puts"'
`date`
`date >&2` # this is output to stderr
STDOUT.puts "resetting STDOUT and STDERR"
$stdout, $stderr = old_stdout, old_stderr
str_stdout.rewind
str_stderr.rewind
puts str_stdout.read
puts str_stderr.read
哪个输出:
redirecting outputs
This is written to the old STDOUT
This is written to the old STDERR
Mon Jul 8 21:51:19 MST 2013
resetting STDOUT and STDERR
This is written to str_stdout
this is output via "puts"
This is written to str_stderr
使用调试器或PRY查看各种输出何时发生的单步步骤。