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类继承与子类实例初始化用法分析
Apr 17 Python
python中随机函数random用法实例
Apr 30 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
python2.7到3.x迁移指南
Feb 01 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
Python 实现微信自动回复的方法
Sep 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
PHP写的资源下载防盗链类分享
2014/05/12 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
angularjs $http调用接口的方式详解
2018/08/13 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
python对数组进行反转的方法
2015/05/20 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
Ejb技术面试题
2015/04/29 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
民事诉讼代理词
2015/05/25 职场文书
放假通知怎么写
2015/08/18 职场文书
大学军训口号大全
2015/12/24 职场文书
导游词之日本富士山
2020/01/06 职场文书
python实现进度条的多种实现
2021/04/29 Python
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
利用Java连接Hadoop进行编程
2022/06/28 Java/Android