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创建线程示例
May 06 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
详谈Python基础之内置函数和递归
Jun 21 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
python递归法实现简易连连看小游戏
Mar 25 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
python识别围棋定位棋盘位置
Jul 26 Python
Python List remove()实例用法详解
Aug 02 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
Python用GET方法上传文件
2015/03/10 Python
python返回昨天日期的方法
2015/05/13 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
考核工作实施方案
2014/03/30 职场文书
个人工作表现评语
2014/04/30 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
运动会方阵口号
2014/06/07 职场文书
殡葬服务心得体会
2014/09/11 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2014年团总支工作总结
2014/11/21 职场文书
初中化学教学反思
2016/02/22 职场文书
初中政治教师教学反思
2016/02/23 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL