Python打印保持在同一行 导入操作系统 导入时间 h=0 s=0 m=0 当s
时,尝试以下方法:Python打印保持在同一行 导入操作系统 导入时间 h=0 s=0 m=0 当s,python,macos,Python,Macos,时,尝试以下方法: import os import time h = 0 s = 0 m = 0 while s <= 60: os.system('clear') print h, "hours", m, 'minutes', s, 'seconds' time.sleep(1) s += 1 if s == 60: m += 1 s = 0 elif m == 60: h += 1
import os
import time
h = 0
s = 0
m = 0
while s <= 60:
os.system('clear')
print h, "hours", m, 'minutes', s, 'seconds'
time.sleep(1)
s += 1
if s == 60:
m += 1
s = 0
elif m == 60:
h += 1
m = 0
s = 0
你还应该看看阿尔夫的答案:-)你应该使用你的终端提供的东西。在大多数情况下,您需要使用
'\r'
(回车,返回到该行的第一列);但根据操作系统的不同,这可能会被解释为它还附加了一个换行符。我觉得我记得OSX可能会这样做
此外,您还需要避免自动换行print
将始终追加。您可以使用尾随逗号,但这会有问题(游离空间,无刷新)。因此,我建议改用sys.stdout.write()
,因为没有换行符通常不会进行刷新,所以也应该显式地使用sys.stdout.flush()
然后,返回到第一列不会删除旧的输出,因此它只会被下一行覆盖。如果比之前的短,您将有尾随垃圾。为了避免这种情况,请再次使用终端提供的内容(通常情况下,'\x1b[K'
会在不移动光标的情况下擦除所有内容,直到行尾,但如果这对您不起作用,只需打印一些空格或确保输出的格式始终相同)
一个更体面的方法(除了使用文字序列的快捷方式)是使用官方的诅咒库
如果CR真的不能像我们希望的那样在OSX上工作,那么您的termcaps中可能会转到一个特定位置(例如第一列),或者您可以使用保存光标
(SC)和恢复光标
(RC)来恢复先前保存的位置:
import curses
curses.setupterm()
EL = curses.tigetstr('el')
CR = curses.tigetstr('cr')
在Python 3中,可以使用以下代码:
sys.stdout.write(SC + "%d hours %d minutes %s seconds" + EL + RC % (h, m, s))
在“\r”之后添加逗号,以便下次打印将转到同一行此答案还有其他问题。仅使用
“\r”
将在下一次输出中添加一个多余的空格,并且不会刷新输出。如果旧行比新行长,也可能出现尾随垃圾。有关如何避免此情况的详细信息,请参阅我的答案。可能的重复这是一个很好的回答,已经寻找了一段时间了。
import curses
curses.setupterm()
EL = curses.tigetstr('el')
CR = curses.tigetstr('cr')
sys.stdout.write(SC + "%d hours %d minutes %s seconds" + EL + RC % (h, m, s))
print("{} hours, {} minutes, {} seconds".format(h, m, s), end = "\r")