输入带星号的密码

input password with astrix

我想一个一个地读取字符并显示给astrix *。 字符可以显示为 *,但我无法通过按 Enter.

退出

这是我的代码:

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)
        sys.stdout.write('*')
    except:
        print "ex"
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN,old_settings)
    return ch

如果我在 ch = sys.stdin.read(1) 中输入 Enter,return 值是多少?

您可以使用 getpass.getpass 提示用户输入密码。但请注意 getpass 模块不显示 unix 密码提示的星号。

至于问题的第二部分 - sys.stdin.read(1) returns \n\r 用于 Enter 输入,这取决于您使用的终端。

最后,我举了一个例子,说明如何使用您的函数读取 CR 或 LF:

while True:', '\n']: break
    ch = getch()
    if ch in ['\r', '\n']: break
    sys.stdout.flush()

如果你真的需要为 unix 显示星号,那就是这样。

为了更安全地读取用户密码,请查看 getpass 模块。

它可以简单地导入和使用,如下所示。但请记住,它不会显示星号。

import getpass

password = getpass.getpass('Your message')

Return sys.stdin.read(1) 的值完全取决于您使用的控制台。