4 回答
TA贡献1802条经验 获得超5个赞
返回以字节为单位。你的情况应该检查b'\r'打破。另外,您必须flush stdout打印星号。
import sys, msvcrt
def getPassword():
sys.stdout.write('Password: ')
sys.stdout.flush()
pw = b'' #init password as bytes
while True:
char = msvcrt.getch() #get typed character - returns as bytes
if char == b'\r': #if character is return, break
break
pw += char #else concat password with character
sys.stdout.write('*') #write asterisk
sys.stdout.flush() #flush buffer to print asterisk
return pw.decode() #return password as string
pw = getPassword()
print(f'\n{pw}')
TA贡献1788条经验 获得超4个赞
你应该暂时放这样的东西:
print(x)
在通话之后getch,您可能会立即得到一些不同的'\r'东西(例如b'\r',这是我这样做时看到的)。因此,这就是您应该比较的对象:
if x == b'\r':
也许检查这一点的最好方法就是简单地启动 Python 并查看它对特定键的作用。以下文字记录显示了我按下该ENTER键时发生的情况:
C:\Pax> python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import msvcrt
>>> print(msvcrt.getch())
b'\r'
TA贡献1797条经验 获得超6个赞
import getpass
import sys
import msvcrt
passwor = ''
while True:
x = msvcrt.getch()
if x == '\r':
break
sys.stdout.write('*')
passwor +=str(x)
print('\n'+passwor)
您遇到了缩进错误。我想这可能对你有帮助。如果不是,请原谅我,因为我是这个领域的初学者
TA贡献1827条经验 获得超4个赞
在 while 之前使用 break 和删除缩进。
import getpass
import sys
import msvcrt
passwor = ''
while True:
x = msvcrt.getch()
if x == '\r':
break
sys.stdout.write('*')
passwor +=str(x)
print('\n'+passwor)
break
希望它会有所帮助:)
添加回答
举报