pythonterminalconsolestdoutflush

python how to clear every old print output and replace new content (multiple lines)


Normally if the content can be print only in one line in terminal, flush=True can do it perfectly, but if the length is too long that it takes maybe 2 lines, flush can not clear the first line but the second line.

console output

is it possible that i can clear these two lines and print the new stuff instead?

code:

content = [i for i in range(11)]
print(content, flush=True, end="\r")
content.append(11)
print(content, flush=True, end="\r")

output:

# before second print
(first line)                [0, 1, 2, 3, 4,
(second line)               5, 6, 7, 8, 9, 
(thrid line)                10]

# after second print
(first line)                [0, 1, 2, 3, 4,
(second line)               5, 6, 7, 8, 9, 
(second print replaced)     [0, 1, 2, 3, 4,
(second print replaced)     5, 6, 7, 8, 9, 
(second print replaced)     10, 11]

# what i want
# clear all the three lines in the first print and replace them
(second print replaced)     [0, 1, 2, 3, 4,
(second print replaced)     5, 6, 7, 8, 9, 
(second print replaced)     10, 11]

Solution

  • Interesting puzzle.

    Here is how I tackled it and you can develop it further to what you want.

    I took 6 long text lines from here

    I made it chuck the long line text and used . instead of space as a blank so its clear whats happening. I have a clip set to 4 just so you can see the end which is overwritten each time with ..

    #!/usr/bin/python3
    
    import os, time
    
    # make a lot of lines
    longlines = """
    Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
    The Python interpreter and the extensive standard library are freely available in source or binary form for all major platforms from the Python web site, https://www.python.org/, and may be freely distributed. The same site also contains distributions of and pointers to many free third party Python modules, programs and tools, and additional documentation.
    The Python interpreter is easily extended with new functions and data types implemented in C or C++ (or other languages callable from C). Python is also suitable as an extension language for customizable applications.
    This tutorial introduces the reader informally to the basic concepts and features of the Python language and system. It helps to have a Python interpreter handy for hands-on experience, but all examples are self-contained, so the tutorial can be read off-line as well.
    For a description of standard objects and modules, see The Python Standard Library. The Python Language Reference gives a more formal definition of the language. To write extensions in C or C++, read Extending and Embedding the Python Interpreter and Python/C API Reference Manual. There are also several books covering Python in depth.
    This tutorial does not attempt to be comprehensive and cover every single feature, or even every commonly used feature. Instead, it introduces many of Python’s most noteworthy features, and will give you a good idea of the language’s flavor and style. After reading it, you will be able to read and write Python modules and programs, and you will be ready to learn more about the various Python library modules described in The Python Standard Library.
    """.splitlines()
    
    maxsize = os.get_terminal_size().columns
    for content in longlines:
        while content:
            clip = 4
            chunk, content = content[:maxsize - clip], content[maxsize:]
            print(f"\r{chunk}", end=f"{'.' * int(maxsize - len(chunk))}", flush=True )
            time.sleep(1)
    

    Alternatively there are curses (which I detest working with) but they would cleanly do what you want. There was another newer curses lib but sadly i cant find that for you.

    EDIT: Found it. Try that out https://textual.textualize.io/