如何使用Ruby $ stdout在一个文本文件中存储每个while循环步骤的控制台输出?

时间:2012-02-03 12:01:54

标签: ruby file-io console stdout

嗨我想存储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

1 个答案:

答案 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"

..哪个看起来更适合你。变量和常量都包含相同的对象。