重点是使用sys.stdout.write()
andsys.stdin.read()
的时候,sys.stdout.write()
来不及显示所有的内容,因为 好像等待ctrl + q
输入退出无限输入循环被触发sys.stdin.read()
。尽管命令是按顺序编写的,但并未使用多线程。也许是python中tty
( termios
)的实现开销,我不知道。raw mode
我使用带有参数VMIN = 0
和VTIME = 0
输出代码的原始模式( ):
for y in range(1, rowCount + 1):
for x in range(1, columnCount + 1):
#sys.stdout.write('\x1b[' + str(y) + ';' + str(x) + 'H')
c = 'o'
//Проверка на то, что курсор установлен в месте предполагаемого окна(терминальное псевдо-окно, этого весь экран успешно заполняется символами 'o'. В этом коде выделяются границы, и ставятся пробелы)
if x in range(text['coordinates']['m1']['x'] - 1, text['coordinates']['m2']['x'] + 1) and y in range(text['coordinates']['m1']['y'] - 1, text['coordinates']['m2']['y'] + 1):
c = ' '
if y == text['coordinates']['m1']['y'] - 1 or y == text['coordinates']['m2']['y']:
c = '-'
if x == text['coordinates']['m1']['x'] - 1 or x == text['coordinates']['m2']['x']:
c = '|'
sys.stdout.write(c)
输入代码:
sys.stdout.write('\x1b[H\x1b[J')
c = sys.stdin.read()
while len(c) != 1 or ord(c) != ord('q') - 96 :
c = sys.stdin.read()
这两段代码是按顺序执行的,它们之间没有其他指令。但是由于某种原因,如果您删除了一条输入,那么输出就会成功显示。而用一段代码,输出似乎来不及完成,等待一个字符的输入就开始了。
我还专门为验证编写了清除这些片段之间的屏幕的说明ESC[H
ESC[J
。无输入时立即清屏,有输入时只有输入正确字符时才清屏(输入结束时)
Python 中的输出是缓冲的,因此
sys.stdout.flush()
在输出后立即使用以“刷新缓冲区”。