繁体   English   中英

Python中的动态单行打印(时间?)

[英]Dynamic single-line printing in Python (time?)

我想制作一个简单的时钟(CLI),将时间打印成一行,并每秒更新一次。 这甚至可能吗? 我应该每秒打印一行吗?

这就是我目前所拥有的,它的功能非常强大:

import calendar, time

a = 1
while a == 1:
    print (calendar.timegm(time.gmtime()))

print函数在传递的字符串后打印换行符( \\n )。 指定回车符( \\r )显式执行您想要的操作。

要每秒打印一次,请在打印后调用time.sleep(1)

import calendar
import time

while 1:
    print(calendar.timegm(time.gmtime()), end='\r')
    time.sleep(1)

UPDATE

要使光标保持在行的末尾,请前置\\r

print('\r', calendar.timegm(time.gmtime()), sep='', end='')

如果我理解,你想要做的是写时间,然后,一秒钟后,用新时间覆盖它,依此类推。

在大多数终端上,打印没有换行符的回车将带您回到同一行的开头。 所以,你几乎可以这样做:

print('\r{}'.format(calendar.timegm(time.gmtime())), end='')

一般来说,这有一个问题:回车不会删除现有文本,它只是让你覆盖它。 那么,如果新值比旧值短,会发生什么? 那么,在你的情况下,这是不可能的; 您正在打印一个10位数字,永远不会变成9位数字。 但如果它一个问题,最简单的解决方案是将{}更改为{<70} ,这将填充一个带空格的短行,最多70个字符。 (当然,如果您的线路长度超过70个字符,或者您的终端可能比70个更窄,请不要使用该号码。)


同时,如果你只是尽快反复这样做,你就会浪费大量的CPU和I / O,并可能搞砸终端的回滚缓冲区,谁知道还有什么。 如果你想每秒做一次,你应该在两者之间sleep

所以:

while True:
    print('\r{}'.format(calendar.timegm(time.gmtime())))
    time.sleep(1)

如果你想得到花哨的话,你可以在大多数非Windows平台上使用curses接管整个终端,在Windows上使用msvcrt控制台I / O,甚至可以手动打印终端转义序列。 但你可能不想得到幻想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM