标准类库-Windows特殊服务之msvcrt
测试环境
win7 64位
Python 3.4 64bit
控制台I/O
1. 例子 getch演示
假设 1.py脚本内容如下:
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getch()
print(ch)
windows cmd控制台运行脚本
E:\>cd /d E:\
E:\>python 1.py
b'1'
b'\r'
b'\x03'
如上,运行程序后,等待输入,先后输入1, 回车,按Ctrl+c,按顺序分别输出以上带背景色部分的内容。
注意:实践发现,有些情况下,输入中文,print(ch)会导致程序直接退出,解决方法就是使用宽字符版的方法。
2. putch演示
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getch()
msvcrt.putch(ch)
如上,运行程序后,等待输入,先后输入1, 回车,按Ctrl+c,先是展示1,然后还是1,最后如下:
3. 例子 getche演示
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getche()
程序运行后,先后输入 1, 按Ctrl + c键,中文输入法下输入 我们, 结果输出如下
对比例子1,例子2,展示更为友好了,但是依旧不足的是中文没法正常显示。解决方案,使用getwch、getwche函数。
4. 例子支持中文
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getwche()
程序运行后,先后输入 1, 按Ctrl + c键,中文输入法下输入 我们, 结果输出如下
5. 例子循环读取
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getch()
msvcrt.putch(ch)
msvcrt.ungetch(ch)
程序运行后,先后输入 1,结果控制台不断的输出1
6. 例子做输入判断
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getch()
print(ch)
if ch == b'1':
print('get it')
elif ch == b'\x03':
print('get it too')
程序运行后,先后输入 1, 按Ctrl + c键,结果输出如下
b'1'
get it
b'\x03'
get it too
对比实验
当替换为宽字符版的getwch后,就不好按之前的方式判断了,解决方案:采用ord函数。
#-*- coding:utf-8 -*-
import msvcrt
while True:
ch = msvcrt.getwch()
print(ch)
if ch == '1':
print('get it')
elif ord(ch) == 3:
print('get it too')
程序运行后,先后输入 1, 按Ctrl + c键,结果输出如下
ord函数
给一个Unicode字符,返回该字符的Unicode数字代码
。例如,给定ord('a')返回整数 97,ord('\u2020')返回 8224。同chr相反。
函数解说
msvcrt.getch()
读取一个由键盘输入的单个字符,并返回该字符的字节字符串表示(Read a keypress and return the resulting character as a byte string),但不会回显在控制台。如果没有按键输入,则会一直等待输入。
msvcrt.getwch()
宽字符版getch,返回Unicode的值。
msvcrt.getche()
类似,getch,但是如果按键输入代表可打印字符,会回显在控制台。
msvcrt.getwche()
宽字符版getche,返回Unicode值。
msvcrt.putch(char)
打印字节字符到控制台,不缓冲。
msvcrt.putwch(unicode_char)
宽字符版的putch,接收Unicode值
msvcrt.ungetch(char)
把字节字符回写到控制台缓冲区,将成为getch、getche下一次读取的字符。
msvcrt.ungetwch(unicode_char)
宽字符版的ungetch,接收Unicode值。
更多相关资料,请查看官方文档