flushing of stdout
On Aug 23, 2007, at 4:24 AM, Joerg van den Hoff wrote:
On Wed, Aug 22, 2007 at 02:52:55PM -0400, Simon Urbanek wrote:
Joerg, On Aug 22, 2007, at 11:20 AM, Joerg van den Hoff wrote:
I post this here, since maybe it's only a Mac problem. I noted only now an apparent change of behaviour in 2.5.0 relative to older times:
I'm not aware of any such change. For me the output is still shown
progressively, e.g.:
for (i in 1:10) { cat("foo",i,"\n"); rnorm(1e7); }
Can you, please, send us a reproducible example?
I use `cat' to stdout from within a long running loop to report the loop count to the user. this output is now delayed until the program completes (i.e. the output is buffered) and, thus, does not make much sense anymore... issuing `flush(stdout())' after the `cat' does not help.
.. and it's not meant to (since the R console has nothing to do with stdout) - try flush.console() instead ...
yeah, sorry for being inprecise: I'm actually using R frequently in a terminal/xterm. in the R GUI console flush.console() (as also proposed by kevin middleton: many thanks) actually achieves the desired flushing (without it: same thing) so the problem persists in the terminal/xterm. try, e.g.,
Ah, that's a different story. You can avoid that by setting TERM=dumb (what ESS uses). The change is actually much older (pre-2.5). In theory flush.console should help here, but apparently it doesn't - I'll see if I can fix that. Cheers, Simon
for (i in 1:10) {
for (j in 1:20000) log(j)
cat(i, " ")
flush(stdout())
}
cat("\n")
to see the effect. this only occurs if the first `cat' does not
contain a
newline (I use this in situations with a large outer loop count to
inform the
user how much the simulation run has progressed and it's simply
nicer without
too many newlines).
the behaviour was definitely different in older versions of R.
regards,
joerg