0

プロセスの実行中に 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

これは単なるテスト スクリプトであるため、出力のリダイレクトを試みることができます。別のチームによって作成された別のスクリプトがあり、今後実際に使用する予定です。

4

1 に答える 1

1

どうですか

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

これにより、stdout に出力されたすべての出力がファイルにリダイレクトされます (リダイレクトはコンソール レベルで行われます)。ファイルに追加する場合は、単純>>>.

于 2013-03-27T16:31:47.783 に答える