^ H ^?在python中

时间:2012-01-23 18:10:58

标签: python backspace

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

这样做

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

我会接受第一个选项并使用

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

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

raw_input("userinput>>")

抓住输入。

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

任何更好(更快)的想法?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

要修复^?擦除时stty erase ^H

答案 2 :(得分:0)

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

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

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

解决了这个问题后

使用此代码段可以处理输入:

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

为了更快,可能会根据操作系统调用某些系统功能。但实际上,python中的IO对于常见的工作来说足够快。