python 脚本中的 'input' 函数在用户按回车键时在终端中显示回车 return 字符 (^M)
'input' function in python script shows carriage return character (^M) in terminal when user presses enter
脚本应将 'enter' 视为发送用户字符串,但它只是将“^M”打印到终端。
我不确定为什么会突然发生这种情况,这不是昨天发生的。这个特定的终端会话发生了一些变化,因为如果我打开一个新终端 window 它会按预期工作。
有什么想法吗?
我在 Mac(xterm?)
上使用 iterm
TL;DR:每当终端开始表现得滑稽时,只需在 OS shell 上键入 reset
命令。
终端仿真器程序(如 iterm)具有复杂的内部状态,以便提供字面上 十年 的功能,以允许在终端上运行更漂亮的程序。
终端最初是键盘,可以将键入的文本物理打印到纸上,回到大型机时代 - 以及“stdin”和“stdout”概念:一个流向前处理所有键入的数据,另一个流处理所有数据打印出来的,直到今天,50 多年后,与文本终端交互的默认方式。
以不同方式处理终端的程序的内部状态更改(例如无需等待“输入”即可读取按键)应该在程序终止时恢复。但由于错误和错误,情况并非总是如此。
我不知道哪个 possible 状态会更改显示“^M”,而不是将 CR 代码应用于终端。还有数十或数百个其他 possible 不当行为,包括完全弄乱所有角色。现代 *nixes(MacOS、Linux、BSD)中的 reset
命令将修复所有问题。
虽然,当然,如果没有应用“enter”,os根本不可能从 os shell 发出命令。然后你将不得不开始一个新的终端会话。在 Python 程序中,如果您碰巧调用了一些总是会破坏终端的代码,您可以 运行 通过调用 os.system('reset')
.[= 将其“重置”为子进程。 13=]
特别是,“^M”代表“ctrl + M”,它是一个控制字符,值为“13”(十六进制为 0x0d)。它是“Carriage Return”控制代码(又名“return”、“enter”、“CR”)的值。如果您从未这样做过:尝试按“ctrl+M”,看看它的行为与“enter”相同。它以“人类可读的形式”显示,而不是在您的案例中充当控制字符。
(关于 xterm 和 iterm:它们的共同点是它们都是“终端仿真器”程序,xterm 是现存最古老的此类程序之一,它可能率先对纯文本视频模式进行了大量改编到图形环境。“iterm”只是一个实现终端功能的普通现代应用程序)
脚本应将 'enter' 视为发送用户字符串,但它只是将“^M”打印到终端。
我不确定为什么会突然发生这种情况,这不是昨天发生的。这个特定的终端会话发生了一些变化,因为如果我打开一个新终端 window 它会按预期工作。
有什么想法吗?
我在 Mac(xterm?)
上使用 itermTL;DR:每当终端开始表现得滑稽时,只需在 OS shell 上键入 reset
命令。
终端仿真器程序(如 iterm)具有复杂的内部状态,以便提供字面上 十年 的功能,以允许在终端上运行更漂亮的程序。
终端最初是键盘,可以将键入的文本物理打印到纸上,回到大型机时代 - 以及“stdin”和“stdout”概念:一个流向前处理所有键入的数据,另一个流处理所有数据打印出来的,直到今天,50 多年后,与文本终端交互的默认方式。
以不同方式处理终端的程序的内部状态更改(例如无需等待“输入”即可读取按键)应该在程序终止时恢复。但由于错误和错误,情况并非总是如此。
我不知道哪个 possible 状态会更改显示“^M”,而不是将 CR 代码应用于终端。还有数十或数百个其他 possible 不当行为,包括完全弄乱所有角色。现代 *nixes(MacOS、Linux、BSD)中的 reset
命令将修复所有问题。
虽然,当然,如果没有应用“enter”,os根本不可能从 os shell 发出命令。然后你将不得不开始一个新的终端会话。在 Python 程序中,如果您碰巧调用了一些总是会破坏终端的代码,您可以 运行 通过调用 os.system('reset')
.[= 将其“重置”为子进程。 13=]
特别是,“^M”代表“ctrl + M”,它是一个控制字符,值为“13”(十六进制为 0x0d)。它是“Carriage Return”控制代码(又名“return”、“enter”、“CR”)的值。如果您从未这样做过:尝试按“ctrl+M”,看看它的行为与“enter”相同。它以“人类可读的形式”显示,而不是在您的案例中充当控制字符。
(关于 xterm 和 iterm:它们的共同点是它们都是“终端仿真器”程序,xterm 是现存最古老的此类程序之一,它可能率先对纯文本视频模式进行了大量改编到图形环境。“iterm”只是一个实现终端功能的普通现代应用程序)