[Python模块学习]使用getpass模块无回显输入
2017-03-10 17:48
706 查看
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'
一些细节
getpass模块内部其实实现了unix_getpass、win_getpass和fallback_getpass三个函数。在模块被导入之后会首先对用户使用的系统进行检查,将相应的函数赋值给getpass。如果检查失败,则将fallback_getpass赋值给getpass。
win_getpass使用msvcrt.getwch()获取无回显输入。
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行,内部实现非常简单。但模块内部有很多处理异常情况的代码,很多细节没办法在博客里面展开细说,说了显得啰嗦,不像是笔记。所以建议有兴趣的读者花点时间阅读一下源码,能对模块的细节有更充分的理解。
相关文章推荐
- python 学习记录(5)-变量、模块名的命名规则及random模块使用
- Python logging模块的学习与使用
- Python之学习笔记(模块的使用)
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
- 【Python】学习笔记——-6.1、使用模块
- DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.
- [Python学习] Logging模块的简单使用
- python中re模块(正则表达式模块)的使用学习
- Python的Crypto模块使用:自动输入Shell中的密码
- python学习笔记之使用threading模块实现多线程(转)
- [Python学习]Logging模块的简单使用
- Python学习笔记之os模块使用总结
- Python学习5:__name__使用以及自定义模块
- 【Python学习笔记】使用模块
- Python学习--使用模块
- Python学习--使用模块
- Python学习18:os标准库模块使用(二),path模块使用
- Python学习之使用ctypes模块操作C扩展程序
- python学习笔记12-模块使用
- python getpass模块:隐藏不显示输入的密码