用astrix输入密码

时间:2018-07-18 07:43:58

标签: python getchar

我想一一阅读char并显示给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

如果我输入 Enter ,其中ch = sys.stdin.read(1)的返回值是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用getpass.getpass提示用户输入密码。但是请注意,getpass模块不会为Unix密码提示显示星号。

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

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

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

如果您甚至需要为unix显示星号,就是这样。

答案 1 :(得分:0)

为了更安全地从用户读取密码,请检出getpass模块。

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

import getpass

password = getpass.getpass('Your message')

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