Python Trick —— 命令行显示

1 应用场景

在命令行展示下,有以下两种场景。

  • 进度条显示。在同一行展示不断的更新的进度条。
  • 信息显示/隐藏控制。比如希望向多个用户展示不同信息,各个用户彼此保密。

2 进度条展示

跟c语言类似,打印使用回车符'\r'。如下例。

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

print("\r下载完毕。                             ")

3 信息显示/隐藏控制

在命令行下,向两个用户展示两条信息。

  • 首先直接展示“信息1”,用户1来到电脑前记录“信息1”,之后通过回车将信息1隐藏。
  • 然后,用户2来到电脑前,敲击回车,显示信息2.

如下所示。其中wait_key函数支持windows/ubuntu。

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 引用

posted @ 2018-11-22 16:24  翻书  阅读(538)  评论(0编辑  收藏  举报