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调用windows api锁定计算机示例
Apr 17 Python
探究数组排序提升Python程序的循环的运行效率的原因
Apr 01 Python
利用Python演示数型数据结构的教程
Apr 03 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
详细介绍Python的鸭子类型
Sep 12 Python
详解python里的命名规范
Jul 16 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Django如何将URL映射到视图
Jul 29 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
Python坐标轴操作及设置代码实例
Jun 04 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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
PHP对象相关知识总结
2017/04/09 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
js数组去重的方法总结
2019/01/18 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python多线程socket编程之多客户端接入
2017/09/12 Python
Django内容增加富文本功能的实例
2017/10/17 Python
python使用fork实现守护进程的方法
2017/11/16 Python
python字典快速保存于读取的方法
2018/03/23 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
物业电工岗位职责
2013/11/20 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
商场总经理岗位职责
2014/02/03 职场文书
升国旗仪式主持词
2014/03/19 职场文书
建设投标担保书
2014/05/13 职场文书
个人委托书范本
2014/09/13 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
springboot读取resources下文件的方式详解
2022/06/21 Java/Android