標准類庫-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值。
更多相關資料,請查看官方文檔