国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中getpass模塊無回顯輸入源碼解析

2020-02-16 11:36:36
字體:
來源:轉載
供稿:網友

本文主要討論了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.tcsetattrexcept (ImportError, AttributeError):  try:    import msvcrt  except ImportError:    getpass = fallback_getpass  else:    getpass = win_getpasselse:  getpass = unix_getpass

總結:getpass模塊只有不到200行代碼(包括注釋和模塊文檔),getuser的主要代碼更是只有短短7行,內部實現非常簡單。但模塊內部有很多處理異常情況的代碼,很多細節沒辦法在博客里面展開細說,說了顯得啰嗦,不像是筆記。所以建議有興趣的讀者花點時間閱讀一下源碼,能對模塊的細節有更充分的理解。

以上就是本文關于Python中getpass模塊無回顯輸入源碼解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博野县| 绥滨县| 华安县| 象州县| 正定县| 萨迦县| 雅安市| 东山县| 梅州市| 囊谦县| 搜索| 深州市| 河池市| 大厂| 聂拉木县| 射洪县| 东阿县| 罗山县| 龙口市| 商河县| 固始县| 额尔古纳市| 莱州市| 平武县| 赤城县| 通榆县| 资溪县| 井研县| 咸丰县| 姚安县| 肃南| 航空| 卓尼县| 安岳县| 句容市| 高陵县| 金秀| 天津市| 健康| 正宁县| 金秀|