0

我有三个输出,我想每 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 行?

4

4 回答 4

1

发生这种情况是因为该命令sys.std.write正在覆盖输出。只有当您调用时,输出才会被清除sys.stdout.flush()。虽然这个命令也只是清除数据缓冲区,这是 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')
于 2020-05-03T20:15:26.963 回答
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()

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

于 2020-05-03T19:13:56.987 回答
0

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

sys.stdout.write("\r{} {} {}".format(a,b,c))
于 2020-05-03T19:03:36.397 回答
0

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

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

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

于 2020-05-03T19:04:14.453 回答