Python Trick —— 命令行顯示

1 應用場景

在命令行展現下,有如下兩種場景。python

  • 進度條顯示。在同一行展現不斷的更新的進度條。
  • 信息顯示/隱藏控制。好比但願向多個用戶展現不一樣信息,各個用戶彼此保密。

2 進度條展現

跟c語言相似,打印使用回車符'\r'。以下例。ios

import time
for i in range(100):
    print("\r當前下載進度{i}%,請耐心等待".format(i=i), end='')
    time.sleep(0.1)

print("\r下載完畢。                             ")

3 信息顯示/隱藏控制

在命令行下,向兩個用戶展現兩條信息。ubuntu

  • 首先直接展現「信息1」,用戶1來到電腦前記錄「信息1」,以後經過回車將信息1隱藏。
  • 而後,用戶2來到電腦前,敲擊回車,顯示信息2.

以下所示。其中wait_key函數支持windows/ubuntu。windows

import os
import sys
import tty
import termios

def wait_key():
    ''' Wait for a key press on the console and return it. '''
    result = None
    if os.name == 'nt':
        import msvcrt
        result = msvcrt.getch()
    else:
        import termios
        fd = sys.stdin.fileno()

        oldterm = termios.tcgetattr(fd)
        newattr = termios.tcgetattr(fd)
        newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
        termios.tcsetattr(fd, termios.TCSANOW, newattr)

        try:
            result = sys.stdin.read(1)
        except IOError:
            pass
        finally:
            termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)

    return result

def cmp(a, b):
    return (a > b) - (a < b)

def wait_enter_key():
    while cmp(wait_key(), '\n') != 0:
        pass

# 顯示信息1
print("信息1  (按下[回車]鍵,將隱藏信息1)", end='')
sys.stdout.flush()

# 回車後隱藏信息1
wait_enter_key()
print("\r請再次按下[回車]鍵,將顯示信息2           ", end='')

# 再次回車後顯示信息2
wait_enter_key()
print("\r信息2                                      ")

4 引用

相關文章
相關標籤/搜索