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

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

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

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

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

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

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

糟糕,马上想出来了。 我不得不使用exec()而不是“

这样做我想要的:

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