如何将下标的STDOUT重定向到ruby 2.1.6中的变量

时间:2015-06-04 13:15:45

标签: ruby stdout

到目前为止,这是我的完整代码:

if ARGV.size == 0
    print "Set a library name as parameter"
else
    dir = ARGV[0]
    begin
        Dir.chdir "#{dir}"
    rescue
        print "No such library"
    else
        filelist = Dir.glob "*.rb"
        outfile = "result"
        i = 0
        while i < filelist.size do
            filename = filelist[i]
            output = load "./#{filename}"
            if output == 1
                File.open(outfile, 'a+') { |file| file.write("#{filename}")}
            end
            i += 1
        end
    end
end

我尝试投放的下标可以包含以下内容:print "1"或者:print "0"

我想写一个&#34;结果&#34;文件

  

filename :: OK

如果是print "1",则

  

filename :: WRONG

如果是print "2"

我的问题是output总是等于true而不是10。如何将下标STDOUT重定向到output变量?

2 个答案:

答案 0 :(得分:0)

这应该给你输出:

getSupportFragmentManager().findFragmentById(<container-res-id>);

注意:它返回一个字符串,但您要将输出与数字进行比较。进行必要的转换。

答案 1 :(得分:0)

您可以使用反引号(``)来运行脚本并将其输出捕获为字符串。

`ruby somescript.rb`
# "1"

实际上与load一起使用的hackier方法是在加载脚本之前覆盖$stdout

require 'stringio'
output = StringIO.new
stdout = $stdout

begin
  $stdout = output
  load 'somescript.rb'
ensure
  $stdout = stdout
end
output.string
# "1"