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基于xml parse实现解析cdatasection数据
Sep 30 Python
Python网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
python基础教程之分支、循环简单用法
Jun 16 Python
python实现简单登陆流程的方法
Apr 22 Python
django 发送手机验证码的示例代码
Apr 25 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python3实现高效的端口扫描
Aug 31 Python
Python3 翻转二叉树的实现
Sep 30 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
python实现猜单词游戏
May 22 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
layui table 参数设置方法
2018/08/14 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Python探索之修改Python搜索路径
2017/10/25 Python
python opencv实现图像边缘检测
2019/04/29 Python
在python中做正态性检验示例
2019/12/09 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
Python实现简单猜数字游戏
2021/02/03 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
异步传递消息系统的作用
2016/05/01 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
新党章的学习心得体会
2014/11/07 职场文书
小学班主任自我评价
2015/03/11 职场文书
python requests模块的使用示例
2021/04/07 Python
angular4实现带搜索的下拉框
2022/03/25 Javascript