如何输入密码,但用'*'替换字符

时间:2017-05-04 07:25:44

标签: python python-3.x

标题中的所有内容真的......

我知道你可以使用

getpass.getpass()
然而,如果分发这样的代码,人们会习惯用'*'来表示他们的字符,这样可能会让他们觉得当他们看不到屏幕上没有字符时他们的键盘不能工作。

我希望在输入期间'example'显示为'*******',以便:

Enter Password: example

将显示为

Enter Password: *******

感谢您的回答

3 个答案:

答案 0 :(得分:2)

我为你做了一个解决方案,你可以根据自己的需要进行修改:

  1. 安装getchpip install getch。该模块具有通过char获取输入char的方法。
  2. 创建一个函数,通过char获取用户输入char并在其中打印*

    #import sys (if option 1. is used)
    import getch
    
    def get_password():
        p = ''
        typed = ''
    
        while True:
            typed = getch.getch()
    
            if typed == '\n':
                print(typed)
                break
    
            p += typed
    
            # Choose one of the following solutions:
    
            # 1. General way. Needs import sys
            sys.stdout.write('*')
            sys.stdout.flush()
    
            # 2. Python 3 way:
            print('*', end='', flush=True)
    
       return p
    
  3. 祝你好运:)

    <小时/> 编辑:有关@timgeb关于安全性的评论:

    来自getpass文档:

      

    在Unix上,如果需要,使用replace错误处理程序将提示写入类文件对象流。
    stream默认为控制终端(/dev/tty)或者如果sys.stderr不可用(在Windows上忽略此参数)。

    所以它与上面的函数表现得非常相似,只是我的没有后备选项......

答案 1 :(得分:1)

这个应该这样做:

import msvcrt
import sys

print('Enter your password: ')
password = ''
while True:
    pressedKey = msvcrt.getch()
    if pressedKey == '\r':    
       break
    else:
        password = password+pressedKey
        sys.stdout.write('*')

print('\n' + password)

它是MS VC++ - 适用于Windows的Microsoft Visual C ++。根据{{​​3}}

getpass使用此模块

答案 2 :(得分:0)

真的停止重新发明轮子了。不要在你的程序中包含这样的东西,而是让它使用密码帮助程序。

https://stackoverflow.com/a/67327327/701532

当然,如果你写了一个很好的密码助手来在 python 中输入星星,就像我多年前在 shell 中所做的那样......去吧!