8

ユーザーがユーザー名とパスワードを入力するように求められるログインウィンドウを作成しようとしていますが、パスワードを入力すると、一般的なパスワード入力のように印刷されるアスタリスクを探しています (つまり、Sekr3t は次のようにエコーされます: * * * * * *)。

ここに私がこれまでに持っているコードがありますが、アスタリスクをエコーし​​ない理由がわかりません:

import msvcrt
import sys

def login(prompt = '> '):
   write = sys.stdout.write
   
   for x in prompt:
       msvcrt.putch(x)
   passw = ""
   
   while 1:
       x = msvcrt.getch()
       if x == '\r' or x == '\n':
           break
       if x == '\b':
           # position of my error
           passw = passw[:-1]
       else:
           write('*')
           passw = passw + x
   msvcrt.putch('\r')
   msvcrt.putch('\n')
   return passw

どんな助けでも大歓迎です。

4

3 に答える 3

4

文字を書くことでアスタリスクを消すことができるはずです\x08 \x08。はカーソルを 1 つの\x08位置に戻し、スペースはアスタリスクを上書きし、最後の\x08はカーソルを再び戻し、次の を書き込む正しい位置に置きます*

バックスペースがいつ入力されたかを判断する方法は頭の中でわかりませんが、簡単に行うことができますprint repr(x). after you've calledx = msvcrt.getch()のようなものを追加してから、プログラムを開始してバックスペースを押してください.

于 2012-06-12T06:10:41.343 に答える