有些终端会发送^?
作为退格,其他一些终端会发送^H
。
大多数终端可以配置为改变其行为。
我不想处理所有可能的组合,但我想接受^?
和^H
作为python的退格。
os.system("stty erase '^?'")
我会接受第一个选项并使用
os.system("stty erase '^H'")
我会接受第二个,但第一个将不再可用。 我想用
raw_input("userinput>>")
抓住输入。
我能够弄清楚的唯一方法是实现我自己的shell,它不是“基于原始的输入”,而是“基于字符的输入”。
任何更好(更快)的想法?
答案 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对于常见的工作来说足够快。