【问题标题】:Python - How can I replace multiple output lines?Python - 如何替换多个输出行?
【发布时间】:2020-08-18 03:42:58
【问题描述】:

我有三个输出,我想每 3 秒更换一次。

使用此代码,它只打印 c:

import sys

import time

a = 1

b = 5

c =10

while True:

  sys.stdout.write("\r" + str(a))

  sys.stdout.write("\r" + str(b))

  sys.stdout.write("\r" + str(c))

  time.sleep(3)

  a += 1

  b+=1

  c+=1

  sys.stdout.flush()

有没有人可以将它们全部打印成 3 行?

【问题讨论】:

    标签: python database firebase firebase-realtime-database pyrebase


    【解决方案1】:

    以上都正确。 只需确保为 While 循环创建一些端点。

    import sys 
    import time
    import os 
    
    def clear():
        os.system( 'cls' )
    
    a = 1
    b = 5
    c =10
    
    while c<20:
      sys.stdout.write("\r" "****************************\n") 
      sys.stdout.write("\r" "This is Run : " + str(a) + "\n")
      sys.stdout.write("\r" "****************************\n")
      sys.stdout.write("\r" " This is a : " + str(a) +  "\n This is b :" +  str(b) + "\n This is C:"  +str(c) + "\n" )
    
      time.sleep(2)
    
      a += 1
      b+=1
      c+=1
      sys.stdout.flush()
      clear()
    

    根据您的回复,我认为这就是您要找的。 当我从控制台运行它时,它会清除输出。

    【讨论】:

    • 谢谢,但它不会替换行,它会开始一个新的
    【解决方案2】:

    发生这种情况是因为命令 sys.std.write 正在覆盖输出。只有当您调用 sys.stdout.flush() 时,输出才会被清除。虽然这个命令也只是清除了 data buffer,它是 python 临时存储数据的临时区域。因此,点击它只会将光标移至换行符,即相当于 \n 换行符。

    所以,基本上你需要在字符串末尾写一个\n换行符来显示所有输入。

    另外,如果你想清除控制台,你可以使用os.system('clear')

    您可以参考以下代码以获得更清晰的输出。

    import os
    import sys
    import time
    
    a, b, c = 1, 5, 10
    
    while True:
        sys.stdout.write(f"a:{a} b:{b} c:{c}\n")
        time.sleep(3)
        a += 1
        b += 1
        c += 1
        #clear console
        os.system('clear')
    

    【讨论】:

    • os.system('clear") 或 os.system('cls') 不清除屏幕。我得到一个错误代码,它添加了另一行
    • Thk)) 使用“clear”命令破解 == 想要的结果。
    【解决方案3】:

    你只看到你提到的 c 的原因是因为它是你在调用 sys.stdout.flush() 之前写的最后一件事

    如果您删除 sys.stdout.write("\r" + str(c)) 所在的部分,您将看到 b

    正如@Błotosmętek 在我之前提到并回答的那样,您可以格式化所需的输出,然后执行刷新。

    【讨论】:

      【解决方案4】:

      不,它打印a,立即用b覆盖它,然后用c覆盖,所以c就是你所看到的。让所有三个可见的唯一方法(除了利用 curses 或其他一些高级终端功能)是像这样在单行中打印它们:

      sys.stdout.write("\r{} {} {}".format(a,b,c))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-30
        • 2021-08-03
        • 1970-01-01
        • 2011-02-07
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多