如何将下标的 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
而不是 1
或 0
。如何将下标的 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"
到目前为止,这是我的完整代码:
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
而不是 1
或 0
。如何将下标的 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"