On 29/08/2019 04:40, Hongyi Zhao wrote:
> I read the following code:
> On the line 265-266, it said:
> if STREAM.isatty():
> p = (self.progress_template + '\r') % params
> What's mean by using the above two lines? Can I not use them?
If you don't understand them, you definitely shouldn't use them. So
let's fix that :-)
"isatty()" is a method of the io.IOBase class that checks to see if the
stream is connected to a tty, or to use less jargon, if it is
interactive. "tty" was I think originally an abbreviation for
"teletype", but nowadays it refers to any terminal, anywhere you get a
command line prompt. See
The next line gives you a cheap and cheerful progress message. I
haven't looked at the rest of the code, but I imagine
"self.progress_template" gets set somewhere with a string rather like
"%d%% complete". What the expression does is add a carriage return
character to the end of the string (but *not* a line feed -- remember
that, it will be important in a minute), then the % operator formats the
using the information in "params".
This is easiest to show by example. Suppose "self.progress_template" is
"%d%% complete" as I suggested, and "params" is 1. Then "p" becomes the
string "1% complete\r" (where \r is the carriage return character).
Presumably a little later the code does
which will write "1% complete" to the terminal and then put the cursor
(the "writing point") back to the start of the line. Since there is no
carriage return character, it does *not* move on to a new line. The
next time we call this code, say with params = 2, we write out "2%
complete" over the top of the previous message, obliterating the old
text. The cursor is once again at the start of the line, so we can
carry on with "3% complete", "4% complete" and so on.
TLDR: these two lines set up (but don't output) a progress message for
an interactive stream.
Rhodri James *-* Kynesim Ltd