gpt4 book ai didi

python - 防止终端调整大小 python 诅咒

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:11 28 4
gpt4 key购买 nike

我正在编写一个关于 pythoncurses 的程序,我想知道是否有一种方法可以阻止终端大小调整,以防止curses 在 Linux 和 Windows 上崩溃。这就是发生的事情..我可以阻止这种情况吗?在 Windows 下,这种情况不会发生,因为窗口大小调整不会影响提示比例... http://alessio.ragno.info/Before%20Resize.png http://alessio.ragno.info/After%20Resize.png

`

import curses
screenTest = curses.initscr()
boxTest = curses.newwin(24,80,0,0)
boxTest.box()
curses.noecho()
curses.cbreak()
curses.start_color()
screenTest.keypad(1)
curses.init_pair(1,curses.COLOR_BLACK, curses.COLOR_CYAN)
curses.init_pair(2,curses.COLOR_YELLOW, curses.A_NORMAL)
boxTest.border(0)
boxTest.addstr(1,1,78*"_")
boxTest.addstr(10,10,"Press ESC to quit...")
boxTest.refresh()
x = screenTest.getch()
while x != 27:
boxTest.addstr(1,1,78*"_")
boxTest.addstr(10,10,"Press ESC to quit...")
boxTest.refresh()
x = screenTest.getch()

curses.endwin()
exit()

`

最佳答案

终端将会调整大小,因为用户会这样做。没有通用的方法可以防止这种情况:抑制窗口装饰以消除调整大小夹点是一种不可移植的部分解决方案。您可能会偶尔发现有关此问题不同方面的评论,但没有全面的解决方案。以下是一些链接:

在curses/ncurses(不在PDCurses中)中,库会关注环境变量LINESCOLUMNS,除非使用use_env禁用。功能。 ncurses 在初始化期间为 SIGWINCH 添加了一个信号处理程序,用于检测(并响应)窗口大小调整(例如,请参见 resizeterm )。如果设置了这些环境变量,ncurses 将不会响应。然而(见下文)改变这种特殊情况并不会让Python停止崩溃,因为Python有更多的问题。

ncurses 处理窗口大小调整问题已有近 20 年的历史;有些应用程序无法使用此功能。如果没有特定的测试程序进行讨论,就无法确定程序崩溃的原因。

关于 6 月 2 日早些时候添加的测试程序:

使用 valgrind 运行测试程序,我发现许多错误几乎全部出现在 Python 本身中(Debian 6 和 8 上的 2.6.6 和 2.7.9),以及一小部分 Python 释放 ncurses 拥有的内存的错误。在每种情况下,Python 都会释放已经释放的内存。即使没有调整大小,它也会执行此操作(尽管一些不正确的释放与调整大小有关)。我运行了几次,至少有一次检测到的错误都不是在 ncurses 中。根据 valgrind 的说法,Python 中有几十个点会产生这些错误,其中一些点占了它检测到的 400 多个错误的 2/3。所以这个问题问错了。 (我可以建议对测试程序本身进行一些改进,但似乎真正的问题是Python)。

关于python - 防止终端调整大小 python 诅咒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com