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实现的文件夹清理程序分享
Nov 22 Python
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Python文件操作方法详解
Feb 09 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
opencv实现图像平移效果
Mar 24 Python
python实现简单区块链结构
Apr 25 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
PHP队列用法实例
2014/11/05 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
pytyon 带有重复的全排列
2013/08/13 Python
Python psutil模块简单使用实例
2015/04/28 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python中的set实现不重复的排序原理
2018/01/24 Python
如何基于python实现归一化处理
2020/01/20 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
社区爱国卫生月活动总结
2014/06/30 职场文书
毕业横幅标语
2014/10/08 职场文书
中学语文教学反思
2016/02/16 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python