提问人:ogios 提问时间:9/21/2023 最后编辑:ogios 更新时间:9/21/2023 访问量:53
python 如何清除每个旧的打印输出并替换新内容(多行)
python how to clear every old print output and replace new content (multiple lines)
问:
通常,如果内容只能打印在终端中的一行中,则可以完美地完成,但是如果长度太长,可能需要2行,则无法清除第一行,而是清除第二行。flush=True
flush
我有没有可能清除这两行并打印新的东西?
法典:
content = [i for i in range(11)]
print(content, flush=True, end="\r")
content.append(11)
print(content, flush=True, end="\r")
输出:
# 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]
答:
0赞
Peter Moore
9/21/2023
#1
有趣的谜题。
这是我处理它的方式,你可以进一步发展它,达到你想要的。
我从这里拿走了 6 行长文本
我让它夹住长行文本,并用空格代替空格作为空白,这样它就清楚发生了什么。我将剪辑设置为 4,以便您可以看到每次都用 ..
.
#!/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)
或者,有诅咒(我讨厌使用),但它们会干净利落地做你想做的事。还有另一个更新的诅咒库,但遗憾的是我无法为您找到。
编辑:找到了。试试 https://textual.textualize.io/
评论
0赞
ogios
9/21/2023
谢谢!这是解决这个问题的一种有趣方法,但对于宽字符,它仍然会分成几行,就像你添加表情符号或中文或日文字符一样。当检测到宽字符时,可能需要减少块长度。
0赞
Peter Moore
9/24/2023
@ogios,我会为此做的是用返回块和块的生成器替换分块块,该生成器的大小及其宽字符。 然后,您将用块替换 len(chunk),它应该适用于此。请记住,在某些终端上,宽字符是单宽的。所以这永远是一个问题。
评论