我没有很好的方式来表达这个问题的标题。但我想我可以很清楚地解释我的要求。
问题的标题是,如何制作一个像 copy 一样实时发送到 stdout 的 ruby 程序?
我会解释我的意思。
假设在一个命令提示符中我做
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
然后我看到 ff 文件随着复制的进行而建立起来。
一旦复制完成,那么 ff 就有完整的标准输出
但是,我的 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
aa 文件是空白的,直到 putsandoutput.rb 程序运行完成。
那么aa文件就满了。
但是我希望我的 ruby 程序像复制一样,能够在它运行时将其输出重定向到文件,而不是等到它完成。
有没有可能做到这一点。如果是,如何,如果不是,那为什么不呢?
如果没有,那么我猜这是 Ruby 的限制。
这不是命令行限制,因为“复制”可以做到。
您可能会问如何“刷新”标准输出。我认为这puts
会自动刷新,所以也许不会。试试$stdout.flush
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句