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