python 控制臺(tái)單行刷新,多行刷新實(shí)例
先貼出單行刷新實(shí)現(xiàn)的進(jìn)度條:

對(duì)于控制臺(tái)的單行刷新,比較簡(jiǎn)單,先直接貼出代碼:
strarrs = ['/','|','\\']
for i in range(15):
sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r')
sys.stdout.flush()
time.sleep(1)
對(duì)于單行刷新以及坑
1.print是對(duì)sys.stdout.write的友好封裝,利用sys.stdout.write把數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出,貌似也可用print來(lái)做,這里沒(méi)有深入研究
2.一定要在write()里面加入 '\r',或者是'\b'等轉(zhuǎn)義字符,其中python轉(zhuǎn)義字符表如下:
| 轉(zhuǎn)義字符 | 描述 |
|---|---|
| \(在行尾時(shí)) | 續(xù)行符 |
| \\ | 反斜杠符號(hào) |
| \' | 單引號(hào) |
| \" | 雙引號(hào) |
| \a | 響鈴 |
| \b | 退格(Backspace) |
| \e | 轉(zhuǎn)義 |
| \000 | 空 |
| \n | 換行 |
| \v | 縱向制表符 |
| \t | 橫向制表符 |
| \r | 回車 |
| \f | 換頁(yè) |
| \oyy | 八進(jìn)制數(shù)yy代表的字符,例如:\o12代表?yè)Q行 |
| \xyy | 十進(jìn)制數(shù)yy代表的字符,例如:\x0a代表?yè)Q行 |
| \other | 其它的字符以普通格式輸出 |
這就相當(dāng)于是回車到了輸出開(kāi)頭,然后,重新寫(xiě),在刷新!
如此,一個(gè)簡(jiǎn)單的進(jìn)度條就實(shí)現(xiàn)了!
接下來(lái)說(shuō)一說(shuō),多行的刷新問(wèn)題:
多行刷新,就不能簡(jiǎn)單的使用輸入輸出了,應(yīng)該使用的是一個(gè)curses的庫(kù),這個(gè)庫(kù),是以前用c寫(xiě)的庫(kù),如果熟悉c下,curses庫(kù)的使用的話,用python會(huì)上手很快.
但是我之前并沒(méi)有接觸羅..一點(diǎn)一點(diǎn)看羅- - ,還有一點(diǎn)就是這個(gè)庫(kù),現(xiàn)在好像貌似只能在linux下使用,windows不能使用,mac不太清楚,windows下貌似是有別的解決方案
上效果圖:

大部分實(shí)現(xiàn)curses,的程序模式都是基于以下的代碼
stdscr=curses.initscr() # 一些常用設(shè)置 curses.noecho() curses.cbreak() stdscr.keypad(1) # 以下寫(xiě)監(jiān)聽(tīng)按鍵的代碼或者loop代碼等... .... #關(guān)閉之前的操作 stdscr.keypad(0) curses.echo() curses.nocbreak() curses.endwin()
主要的程序邏輯都在...中,下面直接貼出代碼:
import curses
import time
import os
import random
stdscr = curses.initscr()
curses.noecho() #不輸出- -
curses.cbreak() #立刻讀取:暫不清楚- -
stdscr.keypad(1) #開(kāi)啟keypad
stdscr.box()
width = os.get_terminal_size().columns
height = os.get_terminal_size().lines
c_y = height//2 - 1
c_x = width//2 - 10
stdscr.addstr(c_y+5,c_x,'press C to continue',curses.A_REVERSE)
while True:
c = stdscr.getch()
if c == ord('c') or c == ord('C'):
break
zh_ = '1234567890-qwertyuiopasdfghjklzxcvbnm,[;l,]/~!@#$%^&*()_+}"?{:><}"'';'
while True:
for linei in range(1,width-1):
for linej in range(1,height-1):
if linej == c_y:
if linei <= 5 or linei+6 >= width:
stdscr.addstr(linej,linei,'$')
else:
stdscr.addstr(linej,c_x,time.strftime('%Y-%m-%d %H:%M:%S'),curses.A_BOLD)
else:
randominx = random.randint(0,len(zh_)-1)
stdscr.addstr(linej,linei,zh_[randominx])
stdscr.move(c_y,c_x)
stdscr.refresh()
time.sleep(1)
curses.endwin()
這樣,一個(gè)多行刷新的demo就完成了.
以上這篇python 控制臺(tái)單行刷新,多行刷新實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)python requests的content和text方法的區(qū)別詳解
今天小編就為大家分享一篇對(duì)python requests的content和text方法的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Python爬蟲(chóng)報(bào)錯(cuò)<response [406]>(已解決)
本文主要介紹了Python爬蟲(chóng)報(bào)錯(cuò)<response [406]>,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
python通過(guò)文本在一個(gè)圖中畫(huà)多條線的實(shí)例
今天小編就為大家分享一篇python通過(guò)文本在一個(gè)圖中畫(huà)多條線的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python3爬蟲(chóng)關(guān)于識(shí)別檢驗(yàn)滑動(dòng)驗(yàn)證碼的實(shí)例
在本篇內(nèi)容里小編給大家分享了關(guān)于Python3爬蟲(chóng)關(guān)于識(shí)別檢驗(yàn)滑動(dòng)驗(yàn)證碼的實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-07-07
關(guān)于Python Tkinter Button控件command傳參問(wèn)題的解決方式
這篇文章主要介紹了關(guān)于Python Tkinter Button控件command傳參問(wèn)題的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Python爬蟲(chóng)入門教程01之爬取豆瓣Top電影
這篇文章主要介紹了Python爬蟲(chóng)入門教程01:豆瓣Top電影爬取的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Python實(shí)現(xiàn)將Sheet頁(yè)拆分成單獨(dú)的Excel文件
這篇文章主要為大家詳細(xì)介紹了如何使用 Python 將一個(gè) Excel 文件中的每個(gè)工作表(Sheet)保存成單獨(dú)的 Excel 文件,有需要的小伙伴可以了解下2025-02-02

