调用 halfdelay 或 cbreak 时,使用 curses 的 Python 2.7 脚本会自动在后台运行

调用 halfdelay 或 cbreak 时,使用 curses 的 Python 2.7 脚本会自动在后台运行

我目前正在对一个使用 curses 为用户创建菜单的 Python 脚本进行现代化改造(在 Trusty 14.04 上制作,针对 Bionic 18.04 进行现代化改造)。在脚本首次启动期间,在显示实际 UI 之前,有一行:

curses.halfdelay(10)

(此命令的文档可以在这里) 此行前面是 curses.initscr(),因此应该有一个有效的终端来接收输入。问题是,这一行导致脚本进入后台,您必须 fg 该过程才能继续执行。在 fg 之后,halfdelay 中指定的延迟将发生,然后脚本将正常继续,这表明在实际等待任何字符之前就已进入后台。作为参考,该脚本在 Ubuntu 14.04 中运行良好,因此我倾向于说这是一个由于 getty 工作方式的改变或从 upstart 到 systemd 的行为改变而导致的问题。我发现用 curses.cbreak() 替换 halfdelay 行也会导致它进入后台。由于 halfdelay 本质上导致终端切换到 cbreak 模式,这表明这就是导致问题的原因。我无法在网上找到任何遇到类似问题的人,因此任何帮助都将不胜感激。

谢谢!

答案1

问题是 curses 试图劫持 tty1(已在使用中),因此为了防止当前终端被劫持,操作系统后台出现了问题

相关内容