也许我在问题标题中写了一些奇怪的东西,我试着解释一下 我试图像在基于Linux的系统中那样进行密码输入(键入时没有符号显示) 我找到了一个功能。
def getchar():
import tty, termios, sys
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
pwd = ''
print('Type password:', end=' ') # HERE IS THE PROBLEM
while True:
ch = getchar()
if ch == '\r':
break
pwd += ch
print(pwd)
行'输入密码:'将在while
循环结束后出现。
为什么这样,我该怎么办?
答案 0 :(得分:2)
默认情况下,sys.stdout
是行缓冲,这意味着写入它的所有内容都会被缓冲,直到看到换行符。
因为您用空格替换了标准end='\n'
,所以还没有看到换行符,并且没有刷新缓冲区。设置flush=True
以强制缓冲区无论如何:
print('Type password:', end=' ', flush=True)