3


0

exec()の出力をリアルタイムで印刷するにはどうすればよいですか?

Rubyスクリプトで次の(バックアップ)コードを実行しています。

 for directory in directories
   print `s3sync.rb --exclude="#{EXCLUDE_REGEXP}" --delete --progress -r #{directory} my.amazon.backup.bucket:#{directory}`
 end

実行されたサブプロセスの出力がリアルタイムで端末にエコーされるようにします(サブプロセスが戻るまで待つ必要はありません)。 それ、どうやったら出来るの?

3 Answer


4


`IO.popen`はプロセスを作成し、このプロセスのstdinおよびstdoutのIOオブジェクトを返します。

IO.popen("s3sync.rb …").each do |line|
  print line
end


2


あなたのコードが標準出力を見る必要がなく、人間がそれを見るだけで十分であれば、システムは大丈夫です。 コードを表示するためにコードが必要な場合、多数のソリューションがあります。popenが最もシンプルで、コードにstdoutにアクセスでき、Open3にコードがstdoutとstderrの両方にアクセスできます。 参照:https://web.archive.org/web/20140605181319/http://whynotwiki.com/Ruby_/_Process_management[Ruby Process Management]


0


おっと、すぐにわかりました。 代わりにexec()を使用する必要がありました

これは私が望むことをします:

 for directory in directories
      exec `s3sync.rb --exclude="#{EXCLUDE_REGEXP}" --delete --progress -r #{directory} my.amazon.backup.bucket:#{directory}`
 end