如何实时打印exec()的输出?

时间:2009-12-29 09:45:45

标签: ruby

我在Ruby脚本中运行以下(备份)代码:

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

我希望执行的子进程的输出实时回显到终端(而不是必须等到子进程返回)。我该怎么做?

3 个答案:

答案 0 :(得分:4)

IO.popen创建一个进程并返回此进程的stdin和stdout的IO对象。

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

答案 1 :(得分:2)

如果您不需要代码来查看标准输出,并且人类看到它就足够了,那么系统就可以了。如果你需要你的代码来看它,有很多解决方案,popen是最简单的,让你的代码访问stdout,Open3让你的代码访问stdout和stderr。请参阅:Ruby Process Management

答案 2 :(得分:0)

哎呀,马上就知道了。我不得不使用exec()而不是``

这就是我想要的:

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