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字典多条件排序方法实例
Jun 30 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
Python实现购物车功能的方法分析
Nov 10 Python
python实现整数的二进制循环移位
Mar 08 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python实现五子棋程序
Apr 24 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
浅谈php命令行用法
2015/02/04 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
重命名批处理python脚本
2013/04/05 Python
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
Python 实现微信自动回复的方法
2020/09/11 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
历史学专业个人的自我评价
2013/10/13 职场文书
打架检讨书500字
2014/01/29 职场文书
数控专业自荐书范文
2014/03/16 职场文书
书香校园建设方案
2014/05/02 职场文书
销售员岗位职责范本
2015/04/11 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏