问题标签 [python-curses]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2196 浏览

python - Python 诅咒:快速退出程序

使用 curses 模块快速退出具有无限循环的 Python 程序的最佳方法是什么?

我尝试在循环结束时添加 nodelay() 方法以及此方法:

但是,在循环的一次迭代中进行所有函数调用需要 2-3 秒。而且由于应用程序的原因,每 5 秒运行一次循环是没有意义的。这意味着为了让我退出程序的方式起作用,有时我必须按住“q”2-8 秒。

我的代码如下所示:

我的另一个解决方案是将 while True 替换为:

这样,无需按住“q”即可退出程序。但按“q”一次后仍可能需要 8 秒才能退出。

出于显而易见的原因,这似乎不是退出程序的最佳方式。我很确定应该有更好(更快)的解决方案。

除此之外,该程序运行良好。这是 2 个超过 300 行的文件,所以我只发布了代码的相关部分以及我尝试的解决方案。

0 投票
1 回答
369 浏览

python - Passing stdout from interactive python application to cd command (subshell?)

If I am taking over stdout, with an interactive Python script that launches a console GUI such as curses or urwid; after some actions and closing the loop, how could I cd to a path printed in stdout?

For example,

When run, and pressing q or Q to quit the urwid loop:

If this was a simple python script that only printed to stdout, I could cd $(python simple_script.py). With the above, however, this will hang as the python subshell fails to hijack stdout and process input.

Is it possible to work around this without writing to file?

0 投票
1 回答
134 浏览

python - 每次我运行程序时,Python Curses 窗口都没有正确显示

我在 Python 3.4 中遇到了 ncurses 这个奇怪的问题我正在尝试将一些窗口作为我的应用程序的布局,代码如下所示:

我运行程序五次中有两次,显示了两个带边框的窗口,里面有标题消息 IP-MONITORING。但是这是正确的,其余 3 种情况只是self.curses_windows["border"]显示窗口的边框,没有其他内容。我在刷新方面做错了吗?为什么结果不可预测?

感谢帮助。

0 投票
1 回答
1324 浏览

python - 如何使用诅咒轻松在控制台中显示多列?

我想在控制台中打印带有诅咒的多列数据。有什么简单的方法可以做到这一点?

目前,我的应用程序打印如下信息:

这导致以下输出

但是,我想要的是这样的:

这应该导致:

有什么简单的方法可以实现这一目标?我是否应该简单地使用迭代器以line 1, line 11, line 21, line 2, line 12, line 22,等顺序进行迭代line 3,同时使用line.ljust(30, " ")来获取空格?

或者我应该在 curses 中创建多个屏幕?

是否存在其他甚至更简单的解决方案?

我对诅咒很陌生,因此任何一般性建议+示例都会很棒。

0 投票
1 回答
211 浏览

class - 如何在 Python curses 模块中扩展一个类

在 Python curses 中,可以使用该curses.newwin()函数创建一个新的窗口对象。如何扩展从newwin函数实例化的对象的类?

我已经尝试过dir(curses),但找不到任何明显的类名供我扩展。

0 投票
2 回答
429 浏览

python-3.x - python curses addstr y-offset:unicode的奇怪行为

我在使用 python3 诅咒和 unicode 时遇到问题:

我可以很好地显示 unicode 字符,但是 addstr 的 y-offset 参数(我的代码中的“偏移量”)没有按预期运行;我的屏幕显示“わたhello”而不是“わたしhello”

事实上,偏移量有非常奇怪的行为:

请注意,偏移量不是字节,因为字符是 3 字节的 unicode 字符:

我正在运行 python 4.8.3,curses.version 是“b'2.2'”。

有谁知道发生了什么或如何调试它?提前致谢。

0 投票
1 回答
1105 浏览

python - python脚本长时间运行后崩溃

我有一个在 Raspberry Pi 3 上运行的 python 2.7 脚本。

基本上它的作用是通过 UART 向芯片发送消息,获取响应消息,更新日志文件并将其打印到 UI(由 python curses 创建的监视器上显示的 UI)。它每 1 秒执行一次。

该脚本运行 32 小时没有错误,然后崩溃。UI 崩溃并被错误消息覆盖:“无法打开 shsh:加载共享库时出错:libc.so.6:无法打开共享对象文件...”蟒蛇脚本

我检查了树莓派的内存状态。python 进程在第 32 小时使用了大约 1/4 的总内存。所以不是内存导致崩溃。另外,我尝试在没有监视器的情况下运行它,这将启动一个没有 python.curses 的假 UI 类。同样的崩溃发生在第 32 小时。

现在,我不知道为什么脚本会崩溃。

0 投票
1 回答
555 浏览

python - Python 诅咒:Pool.map 的多处理问题?

我在Pool.mapcurses. Python每当我使用 UI 中断计算更大的工作负载时Pool.mapcurses它不再对默认屏幕做出反应getch。无需立即读取任何按下的键(并继续解析它),我可以按下任意数量的键,直到按下回车键。有时(除此之外)甚至 UI 也会中断(比如显示我正常 shell 的一小部分)。


诅咒 UI 包装器

这是一个包装类 ( Screen),它为我处理 curses UI 的东西:


实际程序

我写了一个小例子,因为当我Pool.mapcursesUI 中组合并且工作量很大时,总是会发生上述故障。该代码只是在数组上计算一些无用multadd东西。numpy


现在,当我以高工作量执行代码时(即处理一个形状数组(8, int(1e7)等于 8 行和 10,000,000 列)cursegetch中断,我得到了这种行为:

在此处输入图像描述

如您所见,我可以q随心所欲地按(或任何其他键),但curse'sgetch没有反应。我必须按 Enter 键才能识别输入。

此外,由于某种原因,第一行被我原来的 shell 输出覆盖。

Pool.map这种行为仅在计算大约需要 1 秒或更长时间时才会发生。

当我设置data_arr为一个小数组时,np.random.rand(8, 100)一切都像魅力一样工作,但是一旦我提供计算需要> = 1秒的大数组,就会出现这个奇怪的错误并破坏我的curses用户界面。

有任何想法吗?

Pool.map不是以某种方式正确地加入了工作进程?

0 投票
1 回答
110 浏览

python - 如何在 python 诅咒中有或没有任何输入字符串的情况下转义子窗口?

在 python curses 中,如果我使用 scr.subwin() 绘制一个子窗口以使用 getstr() 函数获取输入,如下所示

我决定不提供任何意见。我怎样才能逃脱新的子窗口?

谢谢

0 投票
1 回答
890 浏览

python-3.x - 使用 Python curses 将 UTF8 字符写入屏幕的最后一个位置

curses如何使用 Python 的模块将 UTF8 字符写入屏幕的最后一个位置(右下角) ?

这项任务一开始可能看起来很简单,但事实并非如此。首先,Python 2.x无法使用 curses 输出 UTF-8,所以我们在这里假设 Python 3.x。有两个明显的候选人可以这样做:

这给出了一个OverflowError: byte doesn't fit in chtype. 真可惜。关于什么:

虽然这有效,但它也会滚动屏幕。所以我们实际上写入了倒数第二行的最后一列。仍然是最后一行的最后一列,没有我们的性格。

对于大多数职位,addch工作得很好,但不适用于最后一个。inschUTF8 看起来刚刚坏了。