Python中getpass模块无回显输入源码解析
本文主要讨论了python中getpass模块的相关内容,具体如下。
getpass模块
昨天跟学弟吹牛b安利Python标准库官方文档的时候偶然发现了这个模块。仔细一看内容挺少的,只有两个主要api,就花了点时间阅读了一下源码,感觉挺实用的,在这安利给大家。
getpass.getpass(prompt='Password:‘,stream=None)
调用该函数可以在命令行窗口里面无回显输入密码。参数prompt代表提示字符串,默认是'Password:‘。在Unix系统中,stream默认为当前控制的终端。在Windows系统里stream参数会被忽略掉,默认使用stdin。如果无法正常使用getpass,会打印错误信息,然后模块会使用有回显的模式读取数据。
>>>importgetpass >>>passwd=getpass.getpass() Password: >>>print(passwd) ganziqim
getpass.getuser()
返回当前用户名。这个函数会按顺序检查环境变量LOGNAME,USER,LNAME和USERNAME。返回第一个非空的值。如果检查不到非空的值,模块会尝试导入pwd模块,如果系统支持pwd模块,会返回通过pwd模块获取的用户名,否则报错。
>>>getpass.getuser() 'ganzi'
一些细节
这个是写在模块底部的系统检查代码:
try: importtermios termios.tcgetattr,termios.tcsetattr except(ImportError,AttributeError): try: importmsvcrt exceptImportError: getpass=fallback_getpass else: getpass=win_getpass else: getpass=unix_getpass
总结:getpass模块只有不到200行代码(包括注释和模块文档),getuser的主要代码更是只有短短7行,内部实现非常简单。但模块内部有很多处理异常情况的代码,很多细节没办法在博客里面展开细说,说了显得啰嗦,不像是笔记。所以建议有兴趣的读者花点时间阅读一下源码,能对模块的细节有更充分的理解。
以上就是本文关于Python中getpass模块无回显输入源码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!