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支持断点续传的多线程下载示例
Jan 16 Python
Python BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
python 编程之twisted详解及简单实例
Jan 28 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
python简单区块链模拟详解
Jul 03 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
python异常触发及自定义异常类解析
Aug 06 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
python实现腾讯滑块验证码识别
Apr 27 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 面向对象之成员方法详解
2013/05/04 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP钩子实现方法解析
2019/05/21 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python编写分类决策树的代码
2017/12/21 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
python制作抽奖程序代码详解
2021/01/15 Python
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
大学生实习感言
2014/01/16 职场文书
给校长的建议书
2014/03/12 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
活动倡议书范文
2014/05/13 职场文书
励志演讲稿300字
2014/08/21 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
骨干教师考核评语
2014/12/31 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书