2013-03-27 67 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

相關問題