在执行期间将STDOUT输出到带有ruby的文件

时间:2013-03-27 16:29:48

标签: ruby sidekiq

在进程运行时将STDOUT输出到文件的最佳方法是什么?我制作了一个名为“runMyScript”的测试脚本,它有一些echo语句,其间有一些睡眠。

我正在使用Rails和Sidekiq来运行这个工作者:

class RunBuildWorker

  include Sidekiq::Worker

  sidekiq_options retry: false, backtrace: true

  def perform(file_name)
    IO.popen('runMyScript blah blah blah blah') do |io|
      File.open(FILE_MANAGER.configuration_directory + file_name, 'a') do |file|
        while (line = io.gets)
            file.write line
        end
      end
    end
  end

end

不幸的是,在进程完成之前,它不会写入文件。如何在执行期间写入文件?

更新

这是脚本当前的内容。

COUNTER=0
while [ $COUNTER -le 5 ]                                                                                                                                    
do
    echo "The counter is $COUNTER"
    sleep 1
    COUNTER=$(( $COUNTER + 1 ))
done

我应该提到这只是一个测试脚本,所以我可以尝试重定向输出,还有另一个脚本是由我将来实际使用的另一个团队编写的。

1 个答案:

答案 0 :(得分:1)

怎么样?
system("runMyScript blah blah blah blah > #{FILE_MANAGER.configuration_directory + file_name}")

这会将打印到stdout的任何输出重定向到您的文件(重定向在控制台级别完成)。如果您要附加到该文件,只需将>替换为>>