使用星号掩盖python中的用户输入

Jac*_*hip 8 python passwords raw-input masking

我试图用星号掩盖用户输入IDLE的内容,这样他们周围的人就无法看到他们输入/输入的内容.我正在使用基本的原始输入来收集他们输入的内容.

key = raw_input('Password :: ')
Run Code Online (Sandbox Code Playgroud)

用户输入密码后理想的IDLE提示:

Password :: **********
Run Code Online (Sandbox Code Playgroud)

Al *_*art 6

如果您想在Windows / macOS / Linux以及Python 2和3上都可以使用的解决方案,则可以安装该stdiomask模块:

pip install stdiomask
Run Code Online (Sandbox Code Playgroud)

getpass.getpass()(Python标准库中的)不同,stdiomask模块可以在您键入时显示***掩码字符。

用法示例:

>>> stdiomask.getpass()
Password: *********
'swordfish'
>>> stdiomask.getpass(mask='X') # Change the mask character.
Password: XXXXXXXXX
'swordfish'
>>> stdiomask.getpass(prompt='PW: ', mask='*') # Change the prompt.
PW: *********
'swordfish'
>>> stdiomask.getpass(mask='') # Don't display anything.
Password:
'swordfish'
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,参见https://pypi.org/project/stdiomask/

  • 这对于我使用 Python 3.7 的 PyCharm 控制台不起作用,但 getpass.getpass 也不起作用。两者都只是使用类似输入的东西。这似乎是 PyCharm 的限制,而不是您的库的问题。 (3认同)

Mic*_*l L 4

根据操作系统的不同,如何从用户输入中获取单个字符以及如何检查回车符会有所不同。

请参阅这篇文章:Python 从用户处读取单个字符

例如,在 OSX 上,您可以这样操作:

import sys, tty, termios

def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

key = ""
sys.stdout.write('Password :: ')
while True:
    ch = getch()
    if ch == '\r':
        break
    key += ch
    sys.stdout.write('*')
print
print key
Run Code Online (Sandbox Code Playgroud)