📅  最后修改于: 2023-12-03 15:19:12.520000             🧑  作者: Mango
在Python中,有时候我们希望隐藏输入的内容,比如输入密码等敏感信息。本文将介绍三种隐藏输入的方法。
getpass模块提供了一种隐藏输入的方法,当用户输入密码时,输入的字符不会显示在屏幕上,而是显示为*。
import getpass
password = getpass.getpass('Enter password: ')
print('Password is:', password)
上述代码中,getpass.getpass()函数用于获取密码,参数为提示用户输入的字符。
msvcrt模块可用于在Windows平台上隐藏输入。该模块中的 getch() 函数可用于接收单个字符,而在用户输入字符时,getch() 函数不会输出任何东西。
import msvcrt
print('Enter password: ', end='')
password = b''
while True:
ch = msvcrt.getch()
if ch == b'\r': # 回车键结束输入
break
password += ch
print('*', end='', flush=True) # 显示*,flush=True使输出实时显示
print('\nPassword is:', password.decode('utf-8'))
上述代码中,我们使用msvcrt模块中的getch()函数来获取密码。同时,我们仍然要在用户输入密码时显示*,因此我们在其后的 print('*') 语句中加上了 flush 参数。
这种方法用于Linux/Unix系统中的密码输入。首先,我们需要安装getpass和termios两个模块。
import getpass
import termios
# 获取密码
def getpass_unix(prompt='Password: '):
# 设定终端属性
fd = termios.tcgetattr(0)
new_attr = termios.tcgetattr(0)
new_attr[3] = new_attr[3] & ~termios.ECHO
try:
termios.tcsetattr(0, termios.TCSANOW, new_attr)
password = getpass.getpass(prompt)
finally:
termios.tcsetattr(0, termios.TCSANOW, fd)
return password
password = getpass_unix('Enter password: ')
print('Password is:', password)
上述代码中,我们使用termios模块中的tcgetattr()和tcsetattr()函数来设置终端属性,以允许隐藏输入。然后,我们使用getpass模块中的getpass函数获取密码。
以上就是Python中隐藏输入的三种方法。在处理敏感信息时,我们可以选择适合自己的方法来保护用户隐私。