printing to stdout
richard lucassen
mailinglists at lucassen.org
Fri Aug 17 03:51:40 EDT 2018
On Fri, 17 Aug 2018 08:31:22 +1000
Cameron Simpson <cs at cskk.id.au> wrote:
> This isn't specific to Python, you'll find it with most programmes.
> (The shell's builtin "echo" command is an exception.)
[buffer explanation]
I already suspectec a buffered output and to check if it was the
buffer, I created a lot of output by pressing the button that generates
an INT quite a lot of times. But apparently this wasn't enough. After
all, the output is small:
-------
38: ff
39: ff
3a: ff
3b: fb
I fear I generated 4095 bytes instead of 4096. Some wise human being
once said "Murphy was an optimist" :)
> So let's look at your script:
>
> > print ("%x: %x" % (pcf, output))
> [...]
> > print ('[ALERT] possible INT loop, disable 10 seconds')
>
> Your programme will be writing into a buffer. Your messages only go
> out when enough have accrued to fill the buffer.
>
> To force te messages to go out in a timely manner you need to flush
> the buffer. You have two choices here: call sys.stdout.flush() or
> pass "flush=True" with the print call, eg:
>
> print(...., flush=True)
>
> Just looking at your loop I would be inclined to just call flush once
> at the bottom, _before_ the sleep() call:
>
> sys.stdout.flush()
>
> Your call; the performance difference will be small, so it tends to
> come down to keeping your code readable and maintainable.
Yep, the "sys.stdout.flush()" did the job :) I had already been mucking
about with file=sys.stderr, but without result, just because of the
fact that stderr is never buffered AFAIK (the supervised script "run"
has an "exec 2>&1")
Anyroad, it works :)
Thnx!
--
richard lucassen
http://contact.xaq.nl/
More information about the Python-list
mailing list