栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python中的input()提示符之前打印文本

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python中的input()提示符之前打印文本

这是使用ANSI / VT100终端控制转义序列的另一种方法。

我们告诉终端仅滚动终端的上部区域,在该区域打印输出数据,以便下部区域(在该下部区域打印输入提示)保持固定。当退出程序时(使用

Ctrl``C
),我们需要恢复默认的滚动设置。

该程序首先清除屏幕,然后进入循环,提示用户输入数字

n
,然后
range(n)
每行打印一次中的数字,并且延迟很小,以便于查看发生的情况。每个范围的输出都从先前的范围开始。如果用户输入非整数,则将重新打印提示。该
readline
模块是进口的,这样编辑和历史记录都可以在输入提示;
此模块可能并非在所有平台上都可用。

首先是Python 2版本。

''' Print text in a scrolling region of the terminal above a fixed line for input    Written by PM 2Ring 2016.05.29    Python 2 version'''from __future__ import print_functionfrom time import sleepimport readline# Some ANSI/VT100 Terminal Control Escape SequencesCSI = 'x1b['CLEAR = CSI + '2J'CLEAR_LINE = CSI + '2K'SAVE_CURSOR = CSI + 's'UNSAVE_CURSOR = CSI + 'u'def emit(*args):    print(*args, sep='', end='')def set_scroll(n):    return CSI + '0;%dr' % n# Height of scrolling regionheight = 40GOTO_INPUT = CSI + '%d;0H' % (height + 1)emit(CLEAR, set_scroll(height))try:    while True:        #Get input        emit(SAVE_CURSOR, GOTO_INPUT, CLEAR_LINE)        try: n = int(raw_input('Number: '))        except ValueError: continue        finally: emit(UNSAVE_CURSOR)        #Display some output        for i in range(n): print(i) sleep(0.1)except KeyboardInterrupt:    #Disable scrolling, but leave cursor below the input row    emit(set_scroll(0), GOTO_INPUT, 'n')

这是在Python 2和Python 3上运行的版本。在Python
3上运行时,此脚本将调用

shutil.get_terminal_size()
以设置滚动区域的高度。这 可能得到的终端大小在Python
2,但代码是相当混乱的,所以我选择了一个固定的高度。

我应该提到,如果在运行时更改终端大小,则此脚本的两个版本都无法很好地应对;适当的处理留给读者练习。:)

''' Print text in a scrolling region of the terminal above a fixed line for input    Written by PM 2Ring 2016.05.29    Python 2 / 3 version'''from __future__ import print_functionimport sysimport readlinefrom time import sleepif sys.version_info > (3,):    # Get the (current) number of lines in the terminal    import shutil    height = shutil.get_terminal_size().lines - 1    stdout_write_bytes = sys.stdout.buffer.writeelse:    height = 40    input = raw_input    stdout_write_bytes = sys.stdout.write# Some ANSI/VT100 Terminal Control Escape SequencesCSI = b'x1b['CLEAR = CSI + b'2J'CLEAR_LINE = CSI + b'2K'SAVE_CURSOR = CSI + b's'UNSAVE_CURSOR = CSI + b'u'GOTO_INPUT = CSI + b'%d;0H' % (height + 1)def emit(*args):    stdout_write_bytes(b''.join(args))def set_scroll(n):    return CSI + b'0;%dr' % nemit(CLEAR, set_scroll(height))try:    while True:        #Get input        emit(SAVE_CURSOR, GOTO_INPUT, CLEAR_LINE)        try: n = int(input('Number: '))        except ValueError: continue        finally: emit(UNSAVE_CURSOR)        #Display some output        for i in range(n): print(i) sleep(0.1)except KeyboardInterrupt:    #Disable scrolling, but leave cursor below the input row    emit(set_scroll(0), GOTO_INPUT, b'n')


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号