標準類庫-Windows特殊服務之msvcrt
?
by:授客 QQ:1033553122
廣告:出售自研自動化小平臺(無需編碼也可用),有需要請聯系
?
測試環境
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值。
?
?
更多相關資料,請查看官方文檔
?