猿问

Python 运行代码阻止我在控制台中输入

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)

尝试运行代码后,我无法在控制台中输入。认为这是由于 while 循环,但我不知道如何正确打破它。


如果你们对我可以做些什么来修复代码以便它可以接受回车键并停止 while 循环有任何想法,那将非常有帮助。


白猪掌柜的
浏览 104回答 4
4回答

慕后森

返回以字节为单位。你的情况应该检查b'\r'打破。另外,您必须flush stdout打印星号。import sys, msvcrtdef 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 stringpw = getPassword()print(f'\n{pw}')

尚方宝剑之说

你应该暂时放这样的东西:print(x)在通话之后getch,您可能会立即得到一些不同的'\r'东西(例如b'\r',这是我这样做时看到的)。因此,这就是您应该比较的对象:if x == b'\r':也许检查这一点的最好方法就是简单地启动 Python 并查看它对特定键的作用。以下文字记录显示了我按下该ENTER键时发生的情况:C:\Pax> pythonPython 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import msvcrt>>> print(msvcrt.getch())b'\r'

互换的青春

import getpassimport sysimport msvcrt    passwor = ''while True:    x = msvcrt.getch()    if x == '\r':        break    sys.stdout.write('*')    passwor +=str(x)        print('\n'+passwor)您遇到了缩进错误。我想这可能对你有帮助。如果不是,请原谅我,因为我是这个领域的初学者

GCT1015

在 while 之前使用 break 和删除缩进。import getpassimport sysimport msvcrt    passwor = ''while True:        x = msvcrt.getch()        if x == '\r':            break        sys.stdout.write('*')        passwor +=str(x)        print('\n'+passwor)        break希望它会有所帮助:)
随时随地看视频慕课网APP

相关分类

Python
我要回答