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读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
Python操作Excel之xlsx文件
Mar 24 Python
python学生管理系统代码实现
Apr 05 Python
python读取中文txt文本的方法
Apr 12 Python
Python 学习教程之networkx
Apr 15 Python
详解python中index()、find()方法
Aug 29 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
python路径的写法及目录的获取方式
Dec 26 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
基于Python实现天天酷跑功能
Jan 06 Python
Python简易开发之制作计算器
Apr 28 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将session放入memcached的设置方法
2014/02/14 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
Python sys.path详细介绍
2013/10/17 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python切片索引用法示例
2018/05/15 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
EJB面试题
2015/07/28 面试题
电气个人求职信范文
2014/02/04 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
大学开学计划书
2014/04/30 职场文书
食品卫生管理制度
2015/08/06 职场文书