Python诅咒而不清除屏幕

Python诅咒而不清除屏幕,python,command-line-interface,Python,Command Line Interface,我想在Python下使用诅咒而不清除屏幕。原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单,然后很快退出。退出时将弹出菜单中难看的部分留在屏幕上是可以接受的,但不是首选。其想法是将其用于美学不重要的快速实用的系统管理应用程序和脚本 Python init函数似乎总是清除屏幕。我还记得几年前看到一个非Python应用程序做了我喜欢的事情,所以我知道这是可能的,至少在C诅咒程序中是如此。我不会说“做不到”,但我会说“做不到”,用现成的诅咒/NCurses 基本问题是,curses库在初始化时

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

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

我不会说“做不到”,但我会说“做不到”,用现成的诅咒/NCurses

基本问题是,curses库在初始化时无法访问终端的当前状态,尤其是当前显示的字符和图示符

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

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

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

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


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

我也有同样的问题。我对答案很失望,但我理解。美学对我来说很重要,所以我会尝试写一个类似这样的技巧:当我的程序启动时,拍摄一个窗口的截图,使用OCD找出其中的角色,然后开始诅咒并复制我拍摄的截图,然后在上面添加我的UI。可能需要本机代码才能获得屏幕截图,因为我认为没有任何跨平台或纯python的方法可以做到这一点。如果我能让它工作,我可能会在这里分享答案。你成功完成你的应用程序了吗?你是如何解决这个问题的?