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中的map()函数和reduce()函数的用法
Apr 27 Python
python字符串连接方法分析
Apr 12 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python opencv实现图像边缘检测
Apr 29 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
tensorflow如何批量读取图片
Aug 29 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Python多进程编程常用方法解析
Mar 26 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
python实现批量移动文件
Apr 05 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+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
webpack4简单入门实例
2018/09/06 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
vue--vuex详解
2019/04/15 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
python求最大连续子数组的和
2018/07/07 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
python交易记录整合交易类详解
2019/07/03 Python
python多线程扫描端口(线程池)
2019/09/04 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Python正则表达式学习小例子
2020/03/03 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
Python 解析简单的XML数据
2020/07/24 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
详解Python中的路径问题
2020/09/02 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
机电一体化应届生求职信范文
2014/01/24 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
给公司的建议书范文
2014/05/13 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
小学清明节活动总结
2014/07/04 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
实习指导老师意见
2015/06/04 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang