为什么使用print函数的end参数改变输出时间?

时间:2016-05-10 16:51:49

标签: python

也许我在问题标题中写了一些奇怪的东西,我试着解释一下 我试图像在基于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)

如果我不使用end参数,它看起来像这样: enter image description here

end参数:enter image description here

行'输入密码:'将在while循环结束后出现。 为什么这样,我该怎么办?

1 个答案:

答案 0 :(得分:2)

默认情况下,sys.stdout行缓冲,这意味着写入它的所有内容都会被缓冲,直到看到换行符。

因为您用空格替换了标准end='\n',所以还没有看到换行符,并且没有刷新缓冲区。设置flush=True以强制缓冲区无论如何

print('Type password:', end=' ', flush=True)