python 之 sys.stdout輸出不換行


  在處理程序打進度條時,希望不換行顯示進度,可以使用sys.stdout相關函數來進行處理。

  1.print 輸出不換行

  首先可以使用print函數來整體輸入,利用,結尾就可以在同一行內顯示:

  # python=2.7,py3.x print要加括號

  for i in range(10):

  print i,

  >>> 0 1 2 3 4 5 6 7 8 9

  但是這種方法只能在一行里連續輸出,並且只能在換行時候才顯示出來。

  2.sys.stdout進行實時顯示

  為了進行實時顯示,我們需要利用sys.stdout來實現。

  import sys

  for i in range(10):

  sys.stdout.write(str(i))

  sys.stdout.flush()

  # 輸出連續的字符

  >>> 0123456789

  # 可以利用這個做一個進度條:

  sys.stdout.write('Processing>>>')

  for i in range(10):

  sys.stdout.write('*')

  sys.stdout.flush()

  >>> Processing>>>**********

  但是這種方法輸出的是不斷累加的,進度條會不斷增加。如果想要輸出百分數不斷刷新精度就需要利用額外的方法了。

  3.回車或退格符的使用

  stdout.write將需要寫的內容放到緩存里,而后flush來進行刷新。為了不換行不疊加的顯示前文的信息,我們可以利用\r將光標移到行首,然后將前面的輸出覆蓋即可顯示新的內容:

  for i in range(10):

  sys.stdout.write(str(i)+'\r')

  sys.stdout.flush()

  time.sleep(0.5)

  # 將依次輸出0~9十個數字

  >>> 9

  # 我們可以輸出對應的百分數進度

  for i in range(10):

  sys.stdout.write(str(i+1/1*10)+'%\r')

  sys.stdout.flush()

  time.sleep(0.5)

  # 將依次輸出10%~100%

  >>> %100

  # 稍微改造一下就是很好看的進度條

  for i in range(10):

  bar_str = i * '>'

  sys.stdout.write(str((i+1)/1*10)+'%' + bar_str + '\r')

  sys.stdout.flush()

  time.sleep(0.5)鄭州婦科醫院哪家好 http://www.zzkedayy.com/

  # 可以直接copy上面的代碼就可以輸出下面的進度條樣式,在同一行中刷新百分數,延長進度符號

  >>> 100%>>>>>>>>>

  除了使用\r外,還可以使用退格符號\b在進度條后進行刷新:

  for i in range(10):

  sys.stdout.write('*->'+ '\b\b') #為了不斷加長中間的*,需要先將->刪除再寫入

  sys.stdout.flush()

  time.sleep(0.5)

  # 帶箭頭的進度條

  >>> **********->

  # 最后把百分數也加上

  for i in range(10):

  bar_str = i * '*' + '->'

  sys.stdout.write(str((i+1)/1*10)+'%' + bar_str + '\b\b\r')

  sys.stdout.flush()

  time.sleep(0.5)

  # 刷新百分數和逐漸增長的進度條:

  >>> 100%*********->


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM