代码之家  ›  专栏  ›  技术社区  ›  barlop Sandeep

如何制作一个ruby程序,像copy一样实时发送到标准输出?

  •  0
  • barlop Sandeep  · 技术社区  · 8 年前

    我没有很好的方式来表达这个问题的标题。但我想我可以很清楚地解释我的要求。

    问题的标题是,如何制作一个ruby程序,像copy一样实时发送到stdout?

    我会解释我的意思。

    假设在一个命令提示符中

    C:\Windows\System32>md e:\exes
    
    C:\Windows\System32>copy *.exe e:\exes >c:\carp\f.f
    
    C:\Windows\System32>
    

    然后在另一个命令提示符下

    C:\carp>type f.f
    

    然后,随着拷贝的进行,我看到f.f文件逐渐建立起来。

    一旦拷贝完成,f.f就有了完整的标准输出

    然而,我的ruby程序并非如此

    这是我的ruby程序

    E:\rubylig>type putsandoutput.rb
    20.times do
     puts "a"
      sleep 1
    end
    
    E:\rubylig>ruby putsandoutput.rb >a.a
    

    如果我打开另一个cmd提示符

    E:\rubylog>type a.a
    

    a.a文件为空,直到putsandoutput。rb程序已运行完成。

    则a.a文件已满。

    但我希望我的ruby程序像copy一样,能够在运行时将其输出重定向到文件,而不是等到完成。

    有可能做到这一点吗。如果是,怎么做?如果不是,为什么?

    如果不是的话,我猜这是Ruby的局限性。。

    这不是命令行限制,因为“复制”可以做到这一点。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Phlip    8 年前

    您可能会问如何“冲洗”stdout。我以为 puts 会自动冲洗,所以可能不会。尝试 $stdout.flush 。

    推荐文章