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自动生产表情包
Mar 17 Python
python psutil库安装教程
Mar 19 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
Python测试线程应用程序过程解析
Dec 31 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
python中Pexpect的工作流程实例讲解
Mar 02 Python
python使用torch随机初始化参数
Mar 22 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支持页面回退的两种方法
2008/01/10 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python制作简易注册登录系统
2016/12/15 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python3.6实现学生信息管理系统
2019/02/21 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
财务简历的自我评价
2014/03/05 职场文书
房屋出售协议书
2014/04/10 职场文书
英语系毕业生求职信
2014/07/13 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
解除同居协议书
2015/01/29 职场文书
业务员岗位职责范本
2015/04/03 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers