标准类库-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值。

更多相关资料,请查看官方文档

Python 标准类库-Windows特殊服务之msvcrt的更多相关文章

  1. python 标准类库-并行执行之subprocess-子进程管理

    标准类库-并行执行之subprocess-子进程管理 by:授客QQ:1033553122 1.使用subprocess模块 以下函数是调用子进程的推荐方法,所有使用场景它们都能处理.也可用Popen ...

  2. Python 标准类库- 因特网协议于支持之UUID

    标准类库- 因特网协议于支持之UUID by:授客 QQ:1033553122   测试环境 python3 UUID生成函数定义 uuid.getnode() 获取一个表示硬件地址的48位正整数.第 ...

  3. Python 标准类库 - 因特网协议与支持之socketserver

    标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1  通过子类化BaseReq ...

  4. Python 标准类库-数据类型之copy-深拷贝浅拷贝操作

    标准类库-数据类型之copy-深拷贝浅拷贝操作   by:授客 QQ:1033553122 Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系. copy.copy(x) 返回x的浅拷贝 ...

  5. python 标准类库-数据类型之集合-容器数据类型

    标准类库-数据类型之集合-容器数据类型   by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...

  6. Python 标准类库-日期类型之datetime模块

    标准类库-日期类型之datetime模块    by:授客 QQ:1033553122 可用类型 3 实践出真知 4 timedelta对象 4 class datetime.timedelta(da ...

  7. Python 标准类库-数字和数学模块之decimal使用简介

    标准类库-数字和数学模块之decimal使用简介 by:授客 QQ:1033553122 例子 >>>from decimal import * >>>getcon ...

  8. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  9. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

随机推荐

  1. java IO流之详细总结

    什么是io流? 分为两种: 输入流:可以从文件中读取到程序,从源数据源读取到程序,叫做输入流. 输出流:可以从程序中读取到文件,从程序写,使用输出流,写入到文件中.叫做输出流. 使用File操作文件或 ...

  2. 爬虫不过如此(python的Re 、Requests、BeautifulSoup 详细篇)

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取 ...

  3. 消除第三方库moodycamel的编译器警告

    在项目中需要引入第三方无锁队列,此处我选用的是moodycamel. 然而引入头文件编译之后,一直提示报错信息,需要专门针对此文件消除编译警告(本人使用GCC编译器). 在文件头处添加如下语句: #i ...

  4. Kubernetes集群搭建之Etcd集群配置篇

    介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...

  5. github代码clone加速

    这阵子想看看开源项目 MyBatis 的源码,结果使用 git 的 clone 命令怎么也 clone 不下来,我以为是网速慢,上 Google 一搜,原来 Github 的域名被 DNS 污染了,我 ...

  6. Spring Boot 简介

    作者其他Spring系列文章 Spring Framework简介 Spring框架快速入门  Spring Boot愿景 Spring Boot愿景就是让我们创建可运行的.独立的.基于Spring的 ...

  7. #20 Python文件

    前言 前面几节枯燥的模块终于结束了,想要完全掌握前几节的模块需要不断的练习才行,毕竟眼过千遍不如手过一遍嘛.在一些项目需求里,要对文件进行IO操作,毕竟重要数据不可能打印到屏幕上而不去保存,Pytho ...

  8. python可变对象和不可变对象的解释

    数据类型分为可变.不可变.可变对象表示可以原处修改该数据对象,不可变对象表示必须创建新对象来保存修改后的数据. 在基础数据类型中: 数值.字符串.元组.frozenset是不可变对象 列表.set.d ...

  9. MySQL之实现Oracle中的rank()函数的功能

      假设表格为student, 数据如下:   我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...

  10. centos rancher 通过本机 docker images 新增container

    示例目标: 将centos 本地的docker image ,通过rancher 进行 add container 相关步骤: step 1 : rancher 所在 centos 主机,有相应的 d ...