2014-12-24 1 views
4

Я пытаюсь скрыть то, что пользователь вводит в IDLE со звездочками, поэтому люди вокруг них не могут видеть, что они набрали/набрали. Я использую основной исходный ввод для сбора что они печатают.Маскирование пользовательского ввода в python со звездочками

key = raw_input('Password :: ') 

Ideal IDLE подсказка после пользователь вводит пароль:

Password :: ********** 
+0

Вам придется сделать некоторые пользовательские стандартный вывод Перенаправление маскировать звездочками, но есть более простой способ получить пароли http://stackoverflow.com/a/1761753/1268926 – Kedar

ответ

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

Чтобы решить эту проблему, я написал этот небольшой модуль pyssword маскировать ввод пароль пользователя в незамедлительный. Он работает с окнами. Код ниже:

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 
+0

«Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится ». – Ghost

+0

Код включен в соответствии с запросом! –

0

ниже код предоставляет заменяет письменные символы с Астерикса и позволяют удалять из ошибочно набранных символов. Количество звездочек отражает количество типизированных символов.

import getpass 
key = getpass.getpass('Password :: ') 
+0

Хотя ваш фрагмент кода может решить проблему, вы должны указать, какова цель вашего кода (как он решает проблему). Кроме того, вы можете проверить https://stackoverflow.com/help/how-to-answer –

 Смежные вопросы

  • Нет связанных вопросов^_^