簡體   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