防止调整终端大小python诅咒

2024-10-01 15:34:38 发布

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

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

`


Tags: infohttppnginitwindowscursescolorpress
1条回答
网友
1楼 · 发布于 2024-10-01 15:34:38

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

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

几乎有20年的windows应用程序无法使用。如果没有特定的测试程序可以讨论,就无法确定程序崩溃的原因。在

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

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

相关问题 更多 >

    热门问题