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中import学习备忘笔记
Jan 24 Python
Python设计模式之代理模式简单示例
Jan 09 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
浅谈Python中的继承
Jun 19 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
Django migrate报错的解决方案
May 20 Python
在python中读取和写入CSV文件详情
Jun 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获取网卡地址的代码
2008/04/09 PHP
PHP中其实也可以用方法链
2011/11/10 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php数组遍历类与用法示例
2019/05/24 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery 学习笔记一
2010/04/07 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
python关于调用函数外的变量实例
2019/12/26 Python
python画图常规设置方式
2020/03/05 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
车间副主任岗位职责
2013/12/24 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
道德模范事迹材料
2014/12/20 职场文书
统计员岗位职责范本
2015/04/14 职场文书
秋季运动会加油词
2015/07/18 职场文书
预备党员入党感言
2015/08/01 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
企业团队精神心得体会
2016/01/19 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书