• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Ahagotyou
V2EX  ›  程序员

求助, 关于 Python print 的一个小小小小小问题.

  •  1
     
  •   Ahagotyou · May 24, 2019 · 3098 views
    This topic created in 2720 days ago, the information mentioned may be changed or developed.

    def p(): print("我是小米", end="\r") print("我是小米的哥哥大米", end="\r") print("我是雷布斯", end="\r")

    output: 我是雷布斯哥哥大米

    如何最后只显示 我是雷布斯. 这个函数效果是: 结果全部只显示在一行且以新输出覆盖旧输出, 问题是只是覆盖, 不会清除旧输出, 导致很尴尬.

    感谢了~

    11 replies  •  2019-05-25 15:14:32 +08:00
    Ahagotyou
    Ahagotyou
    OP
    May 24, 2019
    1
    ```
    print("服")
    ```
    lance6716
    lance6716
    May 24, 2019
    2
    只用 print 做不到,需要调终端接口吧
    leoleoasd
    leoleoasd
    May 24, 2019 via Android
    3
    可以打印退格键
    weyou
    weyou
    May 24, 2019 via Android❤️1
    4
    这个问题跟语言无关。 这次打印的内容比上一次短的话,在后面补空格到相同的长度来覆盖上一次的打印就行了
    baobao1270
    baobao1270
    May 24, 2019
    5
    每一次输出之前,输出一堆空格,先覆盖掉不久行了
    另外,建议用 format 函数统一输出长度
    cissoid
    cissoid
    May 24, 2019
    6
    用 escape code

    print("\x1B[K 我是小米的哥哥大米", end="\r")
    lrxiao
    lrxiao
    May 24, 2019
    7
    写一个 context manager hook 掉 sys.stdout 然后自己搞
    nondanee
    nondanee
    May 24, 2019
    8
    "\r\033[K"
    Qzier
    Qzier
    May 25, 2019 via iPhone
    9
    你需要用先清空标准输出,代码如下:
    Qzier
    Qzier
    May 25, 2019 via iPhone
    10
    import sys
    from time import sleep

    messages = [
    '我是雷军',
    '我是小米',
    '我是大米'
    ]

    while True:
    for msg in messages:
    sys.stdout.flush()
    sys.stdout.write(f'\r{msg}')
    sleep(0.5)
    qcts33
    qcts33
    May 25, 2019
    11
    你需要将终端想象成一个打字机,而\r 的作用只是把打字的位置强行拉回行首,并不会刷新原有输出,所以新的输出只是覆盖原有输出而已,没有被覆盖到的地方还是保留原状
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2984 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
    ♥ Do have faith in what you're doing.