一个 OSX 用户提交了一个错误,该错误CTRL+Y导致 python 终端应用程序被挂起,通过dsusp导致当 Python 程序尝试在标准输入上读取时发送 SIGTSTP。下面的代码解决了这个问题:(上下文)
import sys
import termios
if sys.platform == 'darwin':
attrs = termios.tcgetattr(0)
VDSUSP = termios.VSUSP + 1
attrs[-1][VDSUSP] = 0
termios.tcsetattr(0, termios.TCSANOW, attrs)
- 如何检测到此功能(dsusp)?有没有我可以基于
os.uname()
或类似使用的启发式方法? termios.VDSUSP
不存在,即使在拥有它的系统上也是如此。有没有它失踪的原因?- 这种关闭它的行为有多普遍?使用 readline 的程序似乎在 OSX 上忽略了CTRL+ Y,所以它至少相当普遍。我很久以前添加
stty dsusp undef
到我的 .bashrc 中,所以没有注意到它。
要查看此挂起行为,请在 OSX 或其他具有此功能的设备上运行cat
并输入CTRL+ 。Y Return
$ cat
^Y
[1]+ Stopped cat
$ fg
cat
cat: stdin: Resource temporarily unavailable