📜  python 隐藏输入 - Python (1)

📅  最后修改于: 2023-12-03 15:19:12.520000             🧑  作者: Mango

Python 隐藏输入

在Python中,有时候我们希望隐藏输入的内容,比如输入密码等敏感信息。本文将介绍三种隐藏输入的方法。

方法一:使用getpass模块

getpass模块提供了一种隐藏输入的方法,当用户输入密码时,输入的字符不会显示在屏幕上,而是显示为*。

import getpass

password = getpass.getpass('Enter password: ')
print('Password is:', password)

上述代码中,getpass.getpass()函数用于获取密码,参数为提示用户输入的字符。

方法二:使用msvcrt模块

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 参数。

方法三:使用getpass和termios模块

这种方法用于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中隐藏输入的三种方法。在处理敏感信息时,我们可以选择适合自己的方法来保护用户隐私。