【问题标题】:Curses - Replace getstr input to * (Asterisks)诅咒 - 将 getstr 输入替换为 *(星号)
【发布时间】:2021-06-20 05:15:10
【问题描述】:

我希望 getstr 在按下某个键时显示 *(星号),基本上它就像一个密码登录表单。 关于如何做到这一点的任何线索? (类似于 getpass

所以如果我输入 abcd 它将返回 **** (abcd)

我不知道这个问题是否已经回答了。

【问题讨论】:

    标签: python curses python-curses


    【解决方案1】:

    您可以通过 getch() 将用户输入作为一系列字符

    然后在每次输入后打印 *

    [编辑]:

    忘记处理退格键:-

    请参考以下更健壮的代码:

    import sys
    import msvcrt
    
    def encriptAndsavePassword():
        password = ''
        while True:
            x = ord(msvcrt.getch())
            if x == 13:
                # When system receives a carriage return character
                sys.stdout.write('\n')
                return password
            elif x == 8:
                if len(password) > 0:
                    # Deletes previous character.
                    sys.stdout.write('\b' + ' ' + '\b')                
                    sys.stdout.flush()
                    password = password[:-1] 
            else:
                sys.stdout.write('*')
                password +=x
    

    您可以从here 阅读有关getch() 的信息

    【讨论】:

    • TypeError: can only concatenate str (not "bytes") to str 我认为这行不通,因为我使用的是诅咒而不是控制台
    • 您使用的是哪个操作系统?
    • 它有效,但我不使用控制台输入,我使用curses
    • Which operating system are you using?Windows
    • 我在回答中写的应该可以工作,因为任何输入都只能从控制台获取。 curses 是一个终端控件库,仅用于将屏幕与用户输入进行映射。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2013-02-28
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多