Python中g(shù)etpass模塊無(wú)回顯輸入源碼解析
本文主要討論了python中g(shù)etpass模塊的相關(guān)內(nèi)容,具體如下。
getpass模塊
昨天跟學(xué)弟吹牛b安利Python標(biāo)準(zhǔn)庫(kù)官方文檔的時(shí)候偶然發(fā)現(xiàn)了這個(gè)模塊。仔細(xì)一看內(nèi)容挺少的,只有兩個(gè)主要api,就花了點(diǎn)時(shí)間閱讀了一下源碼,感覺(jué)挺實(shí)用的,在這安利給大家。
getpass.getpass(prompt='Password: ‘, stream=None)
調(diào)用該函數(shù)可以在命令行窗口里面無(wú)回顯輸入密碼。參數(shù)prompt代表提示字符串,默認(rèn)是'Password: ‘。在Unix系統(tǒng)中,stream默認(rèn)為當(dāng)前控制的終端。在Windows系統(tǒng)里stream參數(shù)會(huì)被忽略掉,默認(rèn)使用stdin。如果無(wú)法正常使用getpass,會(huì)打印錯(cuò)誤信息,然后模塊會(huì)使用有回顯的模式讀取數(shù)據(jù)。
>>> import getpass >>> passwd = getpass.getpass() Password: >>> print(passwd) ganziqim
getpass.getuser()
返回當(dāng)前用戶名。這個(gè)函數(shù)會(huì)按順序檢查環(huán)境變量LOGNAME, USER, LNAME和USERNAME。返回第一個(gè)非空的值。如果檢查不到非空的值,模塊會(huì)嘗試導(dǎo)入pwd模塊,如果系統(tǒng)支持pwd模塊,會(huì)返回通過(guò)pwd模塊獲取的用戶名,否則報(bào)錯(cuò)。
>>> getpass.getuser() 'ganzi'
一些細(xì)節(jié)
1.getpass模塊內(nèi)部其實(shí)實(shí)現(xiàn)了unix_getpass、win_getpass和fallback_getpass三個(gè)函數(shù)。在模塊被導(dǎo)入之后會(huì)首先對(duì)用戶使用的系統(tǒng)進(jìn)行檢查,將相應(yīng)的函數(shù)賦值給getpass。如果檢查失敗,則將fallback_getpass賦值給getpass。
2.win_getpass使用msvcrt.getwch()獲取無(wú)回顯輸入。
3.fallback_getpass不僅在一開(kāi)始檢查系統(tǒng)的時(shí)候被調(diào)用,當(dāng)另外兩個(gè)函數(shù)出現(xiàn)錯(cuò)誤的時(shí)候也會(huì)調(diào)用它。而調(diào)用了fallback_getpass又會(huì)先打印錯(cuò)誤信息,然后再調(diào)用模塊內(nèi)部的_raw_input函數(shù)進(jìn)行有回顯的輸入讀取。
這個(gè)是寫(xiě)在模塊底部的系統(tǒng)檢查代碼:
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
總結(jié):getpass模塊只有不到200行代碼(包括注釋和模塊文檔),getuser的主要代碼更是只有短短7行,內(nèi)部實(shí)現(xiàn)非常簡(jiǎn)單。但模塊內(nèi)部有很多處理異常情況的代碼,很多細(xì)節(jié)沒(méi)辦法在博客里面展開(kāi)細(xì)說(shuō),說(shuō)了顯得啰嗦,不像是筆記。所以建議有興趣的讀者花點(diǎn)時(shí)間閱讀一下源碼,能對(duì)模塊的細(xì)節(jié)有更充分的理解。
以上就是本文關(guān)于Python中g(shù)etpass模塊無(wú)回顯輸入源碼解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
python3 QT5 端口轉(zhuǎn)發(fā)工具兩種場(chǎng)景分析
這篇文章主要介紹了python3 QT5 端口轉(zhuǎn)發(fā)工具,功能是打開(kāi)本機(jī)端口,映射到指定IP的端口,接下來(lái)通過(guò)兩種場(chǎng)景給大家詳細(xì)介紹,感興趣的朋友一起看看吧2022-01-01Python實(shí)現(xiàn)投影法分割圖像示例(一)
今天小編就為大家分享一篇Python實(shí)現(xiàn)投影法分割圖像示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python基于回溯法子集樹(shù)模板實(shí)現(xiàn)8皇后問(wèn)題
這篇文章主要介紹了Python基于回溯法子集樹(shù)模板實(shí)現(xiàn)8皇后問(wèn)題,簡(jiǎn)單說(shuō)明了8皇后問(wèn)題的原理并結(jié)合實(shí)例形式分析了Python回溯法子集樹(shù)模板解決8皇后問(wèn)題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09Python通過(guò)Socket手動(dòng)實(shí)現(xiàn)HTTP協(xié)議
這篇文章主要為大家詳細(xì)介紹了Python如何通過(guò)Socket手動(dòng)實(shí)現(xiàn)HTTP協(xié)議,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一2024-03-03解決python3.6 右鍵沒(méi)有 Edit with IDLE的問(wèn)題
這篇文章主要介紹了解決python3.6 右鍵沒(méi)有 Edit with IDLE的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python+numpy實(shí)現(xiàn)矩陣的行列擴(kuò)展方式
今天小編就為大家分享一篇Python+numpy實(shí)現(xiàn)矩陣的行列擴(kuò)展方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11