Python脚本input函数在Mac iTerm终端按回车显示^M问题求助
问题产生原因
- 故障仅出现在当前会话的核心原因是该iTerm会话的*终端行控制规则(stty配置)*被异常篡改:默认配置下终端会把输入的回车符(CR,对应显示为M)自动映射为换行符触发输入提交,配置异常后该映射规则失效,回车不会触发提交,只会原样输出M字符
- 通常触发场景是当前会话此前运行过修改终端模式的程序(例如ncurses类交互工具、自定义终端交互脚本、终端编辑器等),程序异常退出时没有还原终端默认配置
解决方法
修复当前故障会话
两种方案二选一即可,执行后立即生效,无需关闭当前会话:
- 仅修复回车映射问题:执行命令
stty icrnl - 重置整个终端配置到默认状态:执行命令
stty sane
规避后续复发
- 运行需要修改终端配置的程序时,尽量通过正常流程退出,不要直接强制杀死进程
- 自行开发Python终端交互类脚本时,如果用到curses、readline等会修改终端配置的库,需要补充异常处理逻辑,保证脚本退出前还原终端默认配置
内容的提问来源于stack exchange,提问作者Jonny Shanahan
相关产品推荐
相关产品推荐

