Python中getpass模块无回显输入源码解析
作者:GanZiQim 时间:2022-05-02 03:58:28
本文主要讨论了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行,内部实现非常简单。但模块内部有很多处理异常情况的代码,很多细节没办法在博客里面展开细说,说了显得啰嗦,不像是笔记。所以建议有兴趣的读者花点时间阅读一下源码,能对模块的细节有更充分的理解。
来源:http://blog.csdn.net/jy692405180/article/details/61202106
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
可爱动态背景输入框
Apache2 httpd.conf 中文版
sql怎样显示出评论最多的文章?
对python中的控制条件、循环和跳出详解
Python程序慢的重要原因
Python创建简单的神经网络实例讲解
![](https://img.aspxhome.com/file/2023/2/72762_0s.png)
详解Python中__str__和__repr__方法的区别
python中类变量与成员变量的使用注意点总结
CSS选择符小讲
python命令行参数argparse模块基本用法详解
![](https://img.aspxhome.com/file/2023/2/59282_0s.png)
Thinkphp5.0 框架的请求方式与响应方式分析
discuz 跨域整合的记录文件
asp中获取内容中所有图片与获取内容中第一个图片的代码
表单特殊输入js验证
流动的线条 —— 中国汉字书法之美
![](https://img.aspxhome.com/file/UploadPic/200910/30/1-79s.jpg)
各个版本IE合集下载,共存无冲突
![](https://img.aspxhome.com/file/UploadPic/200711/29/20071129132016783s.png)
浅谈javascript的分号[译]
js实现GIF动图分解成多帧图片上传
Python实现随机森林回归与各自变量重要性分析与排序
![](https://img.aspxhome.com/file/2023/0/69580_0s.png)