Python中getpass模块无回显输入源码解析


Posted in Python onJanuary 11, 2018

本文主要讨论了python中getpass模块的相关内容,具体如下。

getpass模块

昨天跟学弟吹牛b安利Python标准库官方文档的时候偶然发现了这个模块。仔细一看内容挺少的,只有两个主要api,就花了点时间阅读了一下源码,感觉挺实用的,在这安利给大家。

getpass.getpass(prompt='Password: ‘, stream=None)

调用该函数可以在命令行窗口里面无回显输入密码。参数prompt代表提示字符串,默认是'Password: ‘。在Unix系统中,stream默认为当前控制的终端。在Windows系统里stream参数会被忽略掉,默认使用stdin。如果无法正常使用getpass,会打印错误信息,然后模块会使用有回显的模式读取数据。

>>> import getpass
>>> passwd = getpass.getpass()
Password:
>>> print(passwd)
ganziqim

getpass.getuser()

返回当前用户名。这个函数会按顺序检查环境变量LOGNAME, USER, LNAME和USERNAME。返回第一个非空的值。如果检查不到非空的值,模块会尝试导入pwd模块,如果系统支持pwd模块,会返回通过pwd模块获取的用户名,否则报错。

>>> getpass.getuser()
'ganzi'

一些细节

1.getpass模块内部其实实现了unix_getpass、win_getpass和fallback_getpass三个函数。在模块被导入之后会首先对用户使用的系统进行检查,将相应的函数赋值给getpass。如果检查失败,则将fallback_getpass赋值给getpass。

2.win_getpass使用msvcrt.getwch()获取无回显输入。

3.fallback_getpass不仅在一开始检查系统的时候被调用,当另外两个函数出现错误的时候也会调用它。而调用了fallback_getpass又会先打印错误信息,然后再调用模块内部的_raw_input函数进行有回显的输入读取。

这个是写在模块底部的系统检查代码:

try:
  import termios
  termios.tcgetattr, termios.tcsetattr
except (ImportError, AttributeError):
  try:
    import msvcrt
  except ImportError:
    getpass = fallback_getpass
  else:
    getpass = win_getpass
else:
  getpass = unix_getpass

总结:getpass模块只有不到200行代码(包括注释和模块文档),getuser的主要代码更是只有短短7行,内部实现非常简单。但模块内部有很多处理异常情况的代码,很多细节没办法在博客里面展开细说,说了显得??拢?幌袷潜始恰K?越ㄒ橛行巳さ亩琳呋ǖ闶奔湓亩烈幌略绰耄?芏阅?榈南附谟懈?浞值睦斫狻?/p>

以上就是本文关于Python中getpass模块无回显输入源码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
在Python中使用NLTK库实现对词干的提取的教程
Apr 08 Python
Python3使用requests发闪存的方法
May 11 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
python变量命名的7条建议
Jul 04 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
django 认证类配置实现
Nov 11 Python
python版微信跳一跳游戏辅助
Jan 11 #Python
微信跳一跳python辅助脚本(总结)
Jan 11 #Python
Python用sndhdr模块识别音频格式详解
Jan 11 #Python
Python用imghdr模块识别图片格式实例解析
Jan 11 #Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 #Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 #Python
python实现员工管理系统
Jan 11 #Python
You might like
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
Node.js事件驱动
2015/06/18 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
巧用canvas
2017/01/21 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
Element Input组件分析小结
2018/10/11 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
mac系统安装Python3初体验
2018/01/02 Python
Python socket实现简单聊天室
2018/04/01 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
django静态文件加载的方法
2018/05/20 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
python合并多个excel文件的示例
2020/09/23 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
出生公证委托书
2014/04/03 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
商品陈列协议书
2014/09/29 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
企业年会祝酒词
2015/08/11 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
关于python类SortedList详解
2021/09/04 Python