嗨我想存储while循环使用的所有步骤生成的整个控制台输出。 我可以将控制台输出存储在一个文本文件中,用于while循环的第一步,但在此之后我的循环终止。 代码段如下:
while line = f.gets do
puts "value: #{line}"
newuri = a.to_s.gsub('fuzz',"#{line}")
print "Attack Request:\n\n#{newuri}\n"
nuri = URI.parse("#{newuri}")
Net::HTTP.start(nuri.host, nuri.port) do |http|
request = Net::HTTP::Get.new nuri.request_uri
response = http.request request
puts "Response"
puts response.body
$stdout = File.new('out.txt','w')
end
end
答案 0 :(得分:1)
我必须承认你的问题有点不清楚。我假设您有一个包含地址的文件,并且您希望有一个文件包含从这些地址收到的响应。
您为什么要重新定义$stdout
?也许你需要的是puts
文本直接到"out.txt"
文件?
试试这个:(我删除了所有“不重要”的细节)
File.open('out.txt','w') do |outfile|
while line = f.gets do
puts "value: #{line}" # This is a "debug" info
outfile.puts "value: #{line}" # This goes to the output file
# ...
Net::HTTP.start(nuri.host, nuri.port) do |http|
request = Net::HTTP::Get.new nuri.request_uri
response = http.request request
outfile.puts "Response"
outfile.puts response.body
end
end
end
因此,如果我正确理解您的问题,您通常不需要“重新定义”标准输出,但您只需将数据放入正确的文件中。方法puts
也存在于打开的文件中,只是“默认情况下”写入标准输出。
此外,如果你想要一些调试信息(不在这段代码中 - 只是在其他可能有用的情况下),我建议使用标准错误而不是标准输出:
$stderr.puts "Some warning"
或
STDERR.puts "Some warning"
..哪个看起来更适合你。变量和常量都包含相同的对象。