Estate atento ya que en este tutorial vas a encontrar la solución que buscas.Esta reseña fue probado por nuestros expertos para garantizar la calidad y veracidad de nuestro post.
Solución:
Si desea una solución que funcione en Windows/macOS/Linux y en Python 2 y 3, puede instalar el stdiomask
módulo:
pip install stdiomask
A diferencia de getpass.getpass()
(que se encuentra en la biblioteca estándar de Python), el stdiomask
El módulo puede mostrar caracteres de máscara *** a medida que escribe.
Ejemplo de uso:
>>> 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'
Desafortunadamente, este módulo, como el integrado de Python getpass
módulo, no funciona en IDLE o Jupyter Notebook.
Más detalles en https://pypi.org/project/stdiomask/
Para resolver esto, escribí este pequeño módulo pyssword para enmascarar la contraseña de entrada del usuario en el aviso. Funciona con ventanas. El código está abajo:
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
Dependiendo del sistema operativo, la forma en que obtiene un solo carácter de la entrada del usuario y cómo verificar el retorno de carro será diferente.
Vea esta publicación: Python lee un solo carácter del usuario
En OSX, por ejemplo, podrías hacer algo como esto:
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