Python在不清除屏幕的情况下诅咒

2024-05-13 08:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python下使用诅咒而不清除屏幕。原因是,我希望我的应用程序弹出一个简单的小菜单在现有的屏幕上,并很快退出。退出时,将弹出菜单中丑陋的部分留在屏幕上是可以接受的,但不是首选。我们的想法是将其用于快速实用的系统管理应用程序和脚本,而美学并不重要。在

Python init函数似乎总是清除屏幕。我还记得几年前看到一个非Python的应用程序做我喜欢的事情,所以我知道这是可能的,至少在C Curses程序中是这样。在


Tags: 函数程序脚本应用程序屏幕init系统菜单
1条回答
网友
1楼 · 发布于 2024-05-13 08:05:27

我不会说“做不到”,但我会说“做不到”的股票,开箱即用的诅咒。

根本的问题是curses库在初始化时无法访问终端的当前状态,特别是当前显示的字符和glyph。

在过去的PC机上,屏幕是内存映射的,所以当程序运行时,它可以访问现有的屏幕状态,以便捕捉并可能在以后恢复。

对于一个通用的智能终端来说,情况未必如此。在Linux或Mac上,终端类型是某种“xterm”。在windows控制台终端上,它是一个ANSI风格的终端(mind xterm也是一种ANSI终端)。Terminal type是termcap/terminfo库使用的代码,curses依赖它来知道如何移动光标、删除字符和行、设置颜色或反转视频等

所有与屏幕交互的诅咒都是通过打印转义序列,而不是操纵内存。它不适用于帧缓冲区。

如果您查看XTerm escape sequences的列表,您将看到没有任何内容可以向宿主程序报告屏幕内容。但是,有一个备用帧缓冲区。例如,vim。使用vim编辑文件时,vim将占据整个屏幕。但是当你退出时,你原来的屏幕就会恢复。vim正在切换到备用屏幕缓冲区,并在那里执行所有操作,然后在退出时恢复主屏幕缓冲区。但这是一个简单的切换练习,vim既不“知道”,也不能访问原始屏幕缓冲区的内容。

如果您使用Linux控制台(在这里可以使用FKeys切换屏幕)或GNU Screen之类的实用程序,那么这些都是不同的。它们依赖于不同的概念(Linux控制台的设备驱动程序,GNU屏幕的伪终端),整个程序维护每个屏幕本身的状态。但据我所知,这些信息不适用于通用程序。如果是的话,那是通过一些专有的方法,而不是诅咒。

相关问题 更多 >