Python中g(shù)etpass模塊無回顯輸入源碼解析
本文主要討論了python中g(shù)etpass模塊的相關(guān)內(nèi)容,具體如下。
getpass模塊
昨天跟學(xué)弟吹牛b安利Python標準庫官方文檔的時候偶然發(fā)現(xiàn)了這個模塊。仔細一看內(nèi)容挺少的,只有兩個主要api,就花了點時間閱讀了一下源碼,感覺挺實用的,在這安利給大家。
getpass.getpass(prompt='Password: ‘, stream=None)
調(diào)用該函數(shù)可以在命令行窗口里面無回顯輸入密碼。參數(shù)prompt代表提示字符串,默認是'Password: ‘。在Unix系統(tǒng)中,stream默認為當前控制的終端。在Windows系統(tǒng)里stream參數(shù)會被忽略掉,默認使用stdin。如果無法正常使用getpass,會打印錯誤信息,然后模塊會使用有回顯的模式讀取數(shù)據(jù)。
>>> import getpass >>> passwd = getpass.getpass() Password: >>> print(passwd) ganziqim
getpass.getuser()
返回當前用戶名。這個函數(shù)會按順序檢查環(huán)境變量LOGNAME, USER, LNAME和USERNAME。返回第一個非空的值。如果檢查不到非空的值,模塊會嘗試導(dǎo)入pwd模塊,如果系統(tǒng)支持pwd模塊,會返回通過pwd模塊獲取的用戶名,否則報錯。
>>> getpass.getuser() 'ganzi'
一些細節(jié)
1.getpass模塊內(nèi)部其實實現(xiàn)了unix_getpass、win_getpass和fallback_getpass三個函數(shù)。在模塊被導(dǎo)入之后會首先對用戶使用的系統(tǒng)進行檢查,將相應(yīng)的函數(shù)賦值給getpass。如果檢查失敗,則將fallback_getpass賦值給getpass。
2.win_getpass使用msvcrt.getwch()獲取無回顯輸入。
3.fallback_getpass不僅在一開始檢查系統(tǒng)的時候被調(diào)用,當另外兩個函數(shù)出現(xiàn)錯誤的時候也會調(diào)用它。而調(diào)用了fallback_getpass又會先打印錯誤信息,然后再調(diào)用模塊內(nèi)部的_raw_input函數(shù)進行有回顯的輸入讀取。
這個是寫在模塊底部的系統(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)部實現(xiàn)非常簡單。但模塊內(nèi)部有很多處理異常情況的代碼,很多細節(jié)沒辦法在博客里面展開細說,說了顯得啰嗦,不像是筆記。所以建議有興趣的讀者花點時間閱讀一下源碼,能對模塊的細節(jié)有更充分的理解。
以上就是本文關(guān)于Python中g(shù)etpass模塊無回顯輸入源碼解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Python中最好用的命令行參數(shù)解析工具(argparse)
這篇文章主要介紹了Python中最好用的命令行參數(shù)解析工具(argparse),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python plt.imshow函數(shù)及其參數(shù)使用
plt.imshow()是Matplotlib庫中的一個函數(shù),主要用于顯示圖像或矩陣數(shù)據(jù),本文主要介紹了Python plt.imshow函數(shù)及其參數(shù)使用,具有一定的參考價值,感興趣的可以了解一下2024-02-02
Python import用法以及與from...import的區(qū)別
這篇文章主要介紹了Python import用法以及與from...import的區(qū)別,本文簡潔明了,很容易看懂,需要的朋友可以參考下2015-05-05
python 解決pycharm運行py文件只有unittest選項的問題
這篇文章主要介紹了python 解決pycharm運行py文件只有unittest選項的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Pycharm報錯:'NoneType'?object?has?no?attribute?
這篇文章主要給大家介紹了關(guān)于Pycharm報錯:'NoneType'?object?has?no?attribute?'bytes'的解決方法,文中通過圖文將解決的方法介紹的非常詳細,需要的朋友可以參考下2022-02-02

