我试图用星号掩盖用户输入IDLE的内容,这样他们周围的人就无法看到他们输入/输入的内容。我使用基本的原始输入来收集什么他们输入。
key = raw_input('Password :: ')
用户输入密码后理想的IDLE提示:
Password :: **********
答案 0 :(得分:4)
如果您想在Windows / macOS / Linux和Python 2&3上都可以使用的解决方案,则可以安装stdiomask
模块:
pip install stdiomask
与getpass.getpass()
(在Python标准库中)不同,stdiomask
模块可以在您键入时显示***掩码字符。
用法示例:
>>> stdiomask.getpass()
Password: *********
'swordfish'
>>> stdiomask.getpass(mask='X') # Change the mask character.
Password: XXXXXXXXX
'swordfish'
>>> stdiomask.getpass(prompt='PW: ', mask='*') # Change the prompt.
PW: *********
'swordfish'
>>> stdiomask.getpass(mask='') # Don't display anything.
Password:
'swordfish'
答案 1 :(得分:2)
根据操作系统的不同,如何从用户输入中获取单个字符以及如何检查回车符将是不同的。
请参阅此帖子:Python read a single character from the user
例如,在OSX上,您可以这样:
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)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
key = ""
sys.stdout.write('Password :: ')
while True:
ch = getch()
if ch == '\r':
break
key += ch
sys.stdout.write('*')
print
print key
答案 2 :(得分:2)
为了解决这个问题,我编写了这个小模块pyssword来在提示符下屏蔽用户输入密码。它适用于Windows。代码如下:
from msvcrt import getch
import getpass, sys
def pyssword(prompt='Password: '):
'''
Prompt for a password and masks the input.
Returns:
the value entered by the user.
'''
if sys.stdin is not sys.__stdin__:
pwd = getpass.getpass(prompt)
return pwd
else:
pwd = ""
sys.stdout.write(prompt)
sys.stdout.flush()
while True:
key = ord(getch())
if key == 13: #Return Key
sys.stdout.write('\n')
return pwd
break
if key == 8: #Backspace key
if len(pwd) > 0:
# Erases previous character.
sys.stdout.write('\b' + ' ' + '\b')
sys.stdout.flush()
pwd = pwd[:-1]
else:
# Masks user input.
char = chr(key)
sys.stdout.write('*')
sys.stdout.flush()
pwd = pwd + char
答案 3 :(得分:0)
免责声明:在终端中不提供星号,但在jupyter笔记本中也是如此。
以下代码提供了用asterix替换的书写字符,并允许删除错误输入的字符。星号的数量反映了键入字符的数量。
import getpass
key = getpass.getpass('Password :: ')
用户按下后输入:
答案 4 :(得分:0)
在尝试执行相同的壮举时,我偶然发现了这个线程。我知道这个线程很旧,但是如果有人需要它,这就是我的方法。
我最终使用了readchar软件包。
这是我的解决方案,它打印星号并处理退格键:
import sys, readchar
def passprompt(prompt: str, out = sys.stdout) -> str:
out.write(prompt); out.flush()
password = ""
while True:
ch = str(readchar.readchar(), encoding='UTF-8')
if ch == '\r':
break
elif ch == '\b':
out.write('\b \b')
password = password[0:len(password)-1]
out.flush()
else:
password += ch
out.write('*')
out.flush()
return password
我必须定期冲洗标准输出才能正常工作。
答案 5 :(得分:0)