我目前正在制作一个程序,该程序读取用户的输入并将其存储在文件中。当用户输入某个字符时,它应该显示在终端中,但是在运行时,程序会等待,直到输入“enter”键以显示当前行上写入的文本。相反,在调试时,一切都按预期运行。为什么会出现这种情况?
这是代码:
import os
from msvcrt import getch
def get():
string = str(getch())
string = string.replace("'", "", 2)
string = string.replace("b", "", 1)
return string
def addEn():
os.system("cls")
lineDict = {}
line = ""
lastLine = 0
print("SYNTAX: word - дума")
print("Input '|' to stop")
print("---------------------")
f = open('test.txt', mode = "w")
f.write("\n")
inp = get()
print("0. ", end = "")
while inp != "|":
if inp != "\\r":
line = line + inp
print(inp, end = "")
f.write(inp)
elif inp == "\\r":
lastLine = lastLine+1
print("\n", end="")
f.write("\n")
print(f"{lastLine}. ", end="")
lineDict[lastLine-1] = line
line = ""
inp = get()
f.close()
print("\nPress any key to go back. . .")
getch()
addEn()
注意:代码还没有完成,所以会有错误(除了我正在写的)
对于将来遇到同样令人困惑的问题的任何人:由于未打印
\n
字符,因此需要刷新缓冲区。它需要手动完成,方法是在每个具有参数 sys.stdout.flush()
的打印函数后面添加 end
,而在给定的字符串中没有新行,或者只需将 flush
添加到 print()
并将其设置为 TRUE
。
这里有一篇文章比我解释得更好: https://www.geeksforgeeks.org/python-sys-stdout-flush/