Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用echo读取密码*&引用;在Python控制台程序中?_Python_Windows - Fatal编程技术网

如何使用echo读取密码*&引用;在Python控制台程序中?

如何使用echo读取密码*&引用;在Python控制台程序中?,python,windows,Python,Windows,我正在Windows下用Python编写一个控制台程序。 用户需要登录才能使用该程序,当他输入密码时,我希望它们被回音为“*”,而我可以得到用户输入的内容。 我在标准库中找到了一个名为getpass的模块,但它在您输入时不会回显任何内容(类似于linux)。 谢谢。这并不能完全回答这个问题,因为getpass函数除了提示之外不会向控制台输出任何东西。原因是这是一个额外的安全层。如果有人在你身后监视你,他们将无法计算出你的密码有多长 下面是一个如何使用它的示例: from getpass impo

我正在Windows下用Python编写一个控制台程序。
用户需要登录才能使用该程序,当他输入密码时,我希望它们被回音为“*”,而我可以得到用户输入的内容。
我在标准库中找到了一个名为getpass的模块,但它在您输入时不会回显任何内容(类似于linux)。
谢谢。

这并不能完全回答这个问题,因为getpass函数除了提示之外不会向控制台输出任何东西。原因是这是一个额外的安全层。如果有人在你身后监视你,他们将无法计算出你的密码有多长

下面是一个如何使用它的示例:

from getpass import getpass
getpass('Enter your password: ')

本例将显示“输入密码:”然后您可以输入密码。

getpass模块是用Python编写的。您可以很容易地修改它来实现这一点。事实上,这里有一个修改版的
getpass.win\u getpass()
,您可以将其粘贴到代码中:

import sys

def win_getpass(prompt='Password: ', stream=None):
    """Prompt for password with echo off, using Windows getch()."""
    import msvcrt
    for c in prompt:
        msvcrt.putch(c)
    pw = ""
    while 1:
        c = msvcrt.getch()
        if c == '\r' or c == '\n':
            break
        if c == '\003':
            raise KeyboardInterrupt
        if c == '\b':
            pw = pw[:-1]
            msvcrt.putch('\b')
        else:
            pw = pw + c
            msvcrt.putch("*")
    msvcrt.putch('\r')
    msvcrt.putch('\n')
    return pw

不过,您可能需要重新考虑这一点。Linux方式更好;即使只知道密码中的字符数,对想要破解密码的人来说也是一个重要的提示。

kindall的答案很接近,但它有一个问题,即退格不能删除星号,以及退格可以返回到输入提示之外

尝试:


注意:mscvrt.putwch不适用于python 2.x,您需要改用mscvrt.putch。

getpass
在原始问题中被提及,并被拒绝,因为它不回显星号。
def win_getpass(prompt='Password: ', stream=None):
    """Prompt for password with echo off, using Windows getch()."""
    if sys.stdin is not sys.__stdin__:
        return fallback_getpass(prompt, stream)
    import msvcrt
    for c in prompt:
        msvcrt.putwch(c)
    pw = ""
    while 1:
        c = msvcrt.getwch()
        if c == '\r' or c == '\n':
            break
        if c == '\003':
            raise KeyboardInterrupt
        if c == '\b':
            if pw == '':
                pass
            else:
                pw = pw[:-1]
                msvcrt.putwch('\b')
                msvcrt.putwch(" ")
                msvcrt.putwch('\b')
        else:
            pw = pw + c
            msvcrt.putwch("*")
    msvcrt.putwch('\r')
    msvcrt.putwch('\n')
    return pw