#coding=utf8 import re, sys, time, os from ctypes import Structure, c_short, windll, byref try: from shutil import get_terminal_size except: from backports.shutil_get_terminal_size import get_terminal_size CN_REGEX = re.compile(u'[\u4e00-\u9fff]') CONTENT = [ u'+--------+------------------------------+------------+------------------+', u'| 代码 | 名称 | ******** | 更新时间 |', u'|--------+------------------------------+------------+------------------|', u'| 110022 | ************** | -0.{}% | 2018-07-20 10:39 |', u'+--------+------------------------------+------------+------------------+', ] def first_solution(): class Pos(Structure): _fields_ = [('X',c_short),('Y', c_short)] class Rect(Structure): _fields_ = [('Left',c_short),('Top',c_short),('Right',c_short),('Bottom',c_short)] class Screen(Structure): _fields_=[('Size',Pos),('CursorPosition',Pos),('Attributes',c_short),('Window',Rect),('MaximumWindowSize',Pos)] h = windll.kernel32.GetStdHandle(-11) s = Screen() windll.kernel32.GetConsoleScreenBufferInfo(h, byref(s)) current_position = s.CursorPosition print('\n'.join(CONTENT).format(11)) time.sleep(1) windll.kernel32.SetConsoleCursorPosition(h, current_position) print('\n'.join(CONTENT).format(22)) def second_solution(): os.system('') columns = get_terminal_size().columns line_number = sum([((len(l) + len(CN_REGEX.findall(l))) // columns + 1) for l in CONTENT]) print('\n'.join(CONTENT).format(11)) time.sleep(1) # ANSI_ESCAPE_CODE: https://en.m.wikipedia.org/wiki/ANSI_escape_code sys.stdout.write('\x1b[{}A\r'.format(line_number)) print('\n'.join(CONTENT).format(22)) first_solution()