Python Curses 不清除屏幕

2024-03-21

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

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


我不会说“这是不可能的”,但我会用开箱即用的 Curses/NCurses 说“这是不可能的”。

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

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

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

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

如果你看一个列表XTerm 转义序列 http://invisible-island.net/xterm/ctlseqs/ctlseqs.html,您将看到没有任何内容可以将屏幕内容报告回主机程序。然而,还有一个备用帧缓冲区。这方面的一个例子也许是,vim。当您编辑文件时vim, vim占据整个屏幕。但当您退出时,您的原始屏幕将恢复。vim正在切换到备用屏幕缓冲区,并在那里执行所有操作,然后在退出时恢复主屏幕缓冲区。但这是一个简单的切换练习,vim不“知道”,也无法访问原始屏幕缓冲区的内容。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Curses 不清除屏幕 的相关文章

随机推荐

  • 如何使用空间来搜索邮政编码的半径?

    背景 我正在编写一个应用程序 用于查找邮政编码特定半径内的事件 您可以将其想象为 Ticketmaster 您输入邮政编码 x 半径内的所有音乐会都会显示出来 我有一个数据库表 其中包含邮政编码以及每个邮政编码的纬度和经度 我还有一个 Ev
  • 我应该在局部变量中引用“this”吗?

    我经常在代码中看到这样的情况 var me this 这是为什么 如果我在局部变量中引用 this 是否会有一些性能提升 有功能的话就很有用了inside一个函数 这样这些嵌套函数中的代码需要访问this从外部背景来看 function e
  • 循环遍历数组以在 React Router 中创建路由

    我想要使 用一个 API 它会返回 React 网站所需的所有网站路线 我不完全确定如何做到这一点 甚至谷歌搜索一个例子 我的代码如下所示 ReactDOM render
  • 应用程序更新后可以保存我放入钥匙串中的值吗?

    我在应用商店中有一个应用程序 在我的应用程序中 我使用钥匙串将一些值 例如 姓名 保存为加密的 如果我使用 xCode 更新我的应用程序 则值没有问题 它们都按照我的意愿保存在钥匙串中 但是如果我将新版本放入应用程序商店并使用应用程序商店中
  • 如何在Python中使用kivy启用/禁用TextInput编辑

    我有一段代码 1 TextInput 值应该显示 但首先它不应该是可编辑的 单击相应的 CheckBox 后 TextInput 将可编辑 2 使用迭代 Label 和 TextInput 应该获得值 Label 和 TextInput 的
  • Android Espresso:“未找到测试”、“进程崩溃”

    当使用 Espresso 测试我的 Android 应用程序时 我注意到运行配置为All in Module运行时找不到测试All in Package成功了 我创建了以下可重现的案例 使用向导使用 minSdk 8 和空 Activity
  • IntelliJ 自动替换双引号字符串

    I am using IntelliJ IDEA for Angular 6 Typescript development When new import is added automatically by IntelliJ it s al
  • 操作栏菜单项文本颜色

    如何更改菜单项标题的文本颜色 我尝试将其更改如下 但它仅更改操作栏标题文本的颜色 而不更改菜单项文本的颜色 尝试这样的事情
  • 指定的控制器无效(错误) - Zend Framework

    我总是收到这个错误 blub libraries Zend Controller Dispatcher Standard php 中出现异常 Zend Controller Dispatcher Exception 消息为 指定的控制器无效
  • 我什么时候应该重写 Equals 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 总是覆盖等于 https stackoverflow com questions 1549553 java always override equals 我应该覆盖equals我创建的任何类
  • Python:Numpy 将数组的每一行与另一个数组的每一行相乘

    我知道对此存在一些疑问 这应该可以通过广播实现 但不知怎的 我真的不明白广播如何通过添加附加轴来工作 还有一个类似的问题 其中一个数组的每一列与另一个数组的每一列相乘 将每一列与每一列相乘 https stackoverflow com q
  • Flowtype - 如何编写类工厂的声明,例如骨干模型?

    广泛的谷歌搜索和阅读 Flow 文档和示例并没有显示 Javascript 中非常常见的模式的任何示例 具有返回类的函数 一个典型的例子是 Backbone var User Backbone Model extend getFullNam
  • 为什么 DOCUMENT_ROOT 与远程服务器上的 realpath('.') 不同

    with echo realpath br echo dirname FILE br echo realpath dirname FILE br echo SERVER PHP SELF br echo getcwd 我总是得到 servi
  • 如何检查 CLI 程序是否正在等待来自 stdin 的输入?

    如何检查我刚刚使用 CreateProcess 启动的 CLI 程序是否正在等待来自 Windows C API 的标准输入的输入 正如上面的一些评论所说 一旦程序已经开始等待 您就无法检查程序是否正在等待标准输入 您可以使用事件处理程序
  • 2 个文档在 MongoDB 中合并

    我需要从 MongoDB 中不同集合的两个文档中获取数据 其中有 1 个公共字段 对数据库没有更改 我是新手 请帮助我 a db users find username email protected cdn cgi l email pro
  • 使用 JQuery 从另一个网站获取 HTML:可能吗?合法的?

    我正在尝试从不在同一域中的网页获取 HTML 代码 html 文本被解析并总结了在 HTML 代码来源的页面上找到的食谱 食谱名称 主要成分 步骤数 然后 用户可以单击该链接并转到域外的该网页来查看菜谱 我知道同源策略 但这是否适用于从国内
  • 使用 Chrome 打开正文中包含 HTML 的 Outlook

    虽然我已经从 Stack 中找到了很多这方面的信息 特别是here https stackoverflow com questions 5620324 mailto with html body 我只是想绝对确定在 Chrome 中无法执行
  • 嵌套哈希中的 Form_tag 参数

    我有一个没有与之关联的模型的表单 所以我正在使用form tag而不是form for 正如预期的那样 当用户提交表单时 每个字段都包含在 params 哈希中 但表单会发生很大变化 我希望在 params 哈希中包含一个哈希 该哈希将保存
  • .Net 3.5 中 Dynamic 关键字的使用

    我使用 net v4 5 在 Visual Studio 2013 中编写了这段代码 我遇到的问题是 我现在必须降级到 net v3 5 而动态关键字会抛出错误 因为缺少程序集引用 net v3 5 中是否有与 动态 等效的类型 或者有什么
  • Python Curses 不清除屏幕

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