5

一些终端将^?作为退格发送,其他一些终端将发送^H. 大多数终端都可以配置为改变它们的行为。我不想处理所有可能的组合,但我想同时接受^?^H作为 python 的退格键。

这样做

os.system("stty erase '^?'")

我会接受第一个选项

os.system("stty erase '^H'")

我会接受第二个,但第一个将不再可用。我想用

raw_input("userinput>>")

抓住输入。

我能够弄清楚的唯一方法是实现我自己的shell,它不适用于“基于原始的输入”,而是适用于“基于字符的输入”。

有更好(更快)的想法吗?

4

3 回答 3

5

内置函数raw_input()(或input()在 Python 3 中)将在导入后自动使用该readline库。这为您提供了一个不错且功能齐全的行编辑器,它可能是您在可用平台上的最佳选择,只要您不介意 Readline 拥有传染性许可证 (GPL)。

于 2013-11-29T10:43:12.427 回答
0

我不完全知道你的问题。IMO,您需要一种方法来从控制台读取一些基于行的文本(包括一些特殊字符)到程序。

不管你用什么方法,如果在不同的控制台读取这个字符有特殊的含义,你应该面对一个控制台(不仅是系统特定的,而且是控制台特定的)问题,控制台中的所有文本都会首先存储在缓冲区中,并且然后显示在屏幕上,最后处理并发送到您的程序。解决此问题的另一种方法是使用原始行获取控制台环境。

您可以添加一个特殊方法(装饰器)来装饰 raw_input() 或某种输入法来处理特殊单词。

解决了这个问题后

使用这个片段可以处理输入,:

def pre():
    textline=raw_input()
    # ^? should replace to the specific value.
    textline.replace("^?","^H")
    return textline

为了更快,也许调用一些依赖于操作系统的系统函数是一个想法。但实际上,python 中的 IO 对于普通工作来说已经足够快了。

于 2012-05-05T06:47:49.693 回答
0

修复^? 在擦除做stty erase ^H

于 2019-01-27T05:02:32.600 回答