Python中的^H ^?
有些终端会把 ^?
当作退格键发送,而有些终端则会发送 ^H
。大多数终端都可以设置来改变它们的行为。我不想去处理所有可能的组合,但我希望在 Python 中能同时接受 ^?
和 ^H
作为退格键。
这样做
os.system("stty erase '^?'")
我会接受第一个选项,使用
os.system("stty erase '^H'")
我会接受第二个选项,但第一个就不再可用了。我想用
raw_input("userinput>>")
来获取输入。
我能想到的唯一办法就是自己实现一个 shell,这个 shell 不是基于“原始输入”,而是基于“字符输入”。
有没有更好(更快)的主意?
3 个回答
0
要解决在删除时出现的 ^? 问题,可以使用命令 stty erase ^H
。
0
我不太清楚你的问题具体是什么。不过我觉得,你需要一个方法来从控制台读取一些基于行的文本(包括一些特殊字符)到你的程序中。
不管你用什么方法,如果读取的字符在不同的控制台中有特殊含义,你就会遇到一个控制台的问题(不仅仅是系统特定的,还有控制台特定的)。所有在控制台中的文本首先会存储在一个缓冲区中,然后再显示在屏幕上,最后处理后发送到你的程序中。解决这个问题的另一种方法是使用一个原始的行获取控制台环境。
你可以给raw_input()或者其他输入方法添加一个特殊的方法(装饰器),来处理这些特殊的词。
解决了这个问题后,
使用下面的代码片段可以处理输入:
def pre():
textline=raw_input()
# ^? should replace to the specific value.
textline.replace("^?","^H")
return textline
如果想要更快,可能根据操作系统调用一些系统函数是个好主意。但实际上,Python中的输入输出对于一般的工作来说已经足够快了。
5
内置的函数 raw_input()
(在 Python 3 中是 input()
)在导入后会自动使用 readline
库。这个库提供了一个功能丰富的行编辑器,如果你在支持这个库的平台上使用它,这通常是个不错的选择,只要你不介意 Readline 的许可证是传染性的(GPL)。