2013-03-27 65 views
0

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

我使用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

什么

system("runMyScript blah blah blah blah > #{FILE_MANAGER.configuration_directory + file_name}") 

这重定向打印到标准输出到您的文件的任何输出(重定向的控制台级完成)。如果您想追加到文件中,只需将>替换为>>即可。

+0

这似乎完成了我之前做的事情。我认为它会起作用,但是当在输出文件上做一个'tail -f'时,它只会在脚本完成后才会出现。 – ardavis 2013-03-27 16:37:20

+0

好像您的脚本不会持续冲洗它的打印件。你能举一个“runMyScript等等等等等等等”的小例子吗?问题应该位于您的脚本中。 – gorootde 2013-03-27 16:39:52

+0

好的,我会更新我的问题。 – ardavis 2013-03-27 16:40:22

相关问题