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

How to redirect STDOUT of subscript into variable in ruby 2.1.6

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

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".

我想写入 "result" 文件

filename :: OK

如果是print "1",并且

filename :: WRONG

如果是print "2".

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

这应该给你输出:

output = `ruby #{filename}`

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

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

`ruby somescript.rb`
# "1"

一种更黑客的方法,但实际上适用于 load,是在加载脚本之前覆盖 $stdout

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

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