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 22 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Django在win10下的安装并创建工程
Nov 20 Python
python用户管理系统的实例讲解
Dec 23 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
python做反被爬保护的方法
Jul 01 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
520使用Python实现“我爱你”表白
May 20 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
利用python制作拼图小游戏的全过程
Dec 04 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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP的自定义模板引擎
2017/03/24 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
微信小程序 navbar实例详解
2017/05/11 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
python opencv之SIFT算法示例
2018/02/24 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
.NET面试10题
2014/02/24 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
opencv实现图像几何变换
2021/03/24 Python
写给女朋友的道歉信
2014/01/08 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
高中教师个人工作总结
2015/02/10 职场文书
实习介绍信范文
2015/05/05 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android