^H^?用python
一些终端将发送^H^?用python,python,backspace,Python,Backspace,一些终端将发送^?作为退格,其他一些终端将发送^H。 大多数终端可以配置为更改其行为。 我不想处理所有可能的组合,但我愿意接受^?和^H作为python的退格 这样做 我会接受第一个选择,并同意 os.system("stty erase '^H'") 我会接受第二个,但第一个将不再可用。 我想用 raw_input("userinput>>") 获取输入 我能弄明白的唯一方法是实现我自己的shell,它不是在“基于原始的输入”上工作,而是
^?
作为退格,其他一些终端将发送^H
。
大多数终端可以配置为更改其行为。
我不想处理所有可能的组合,但我愿意接受^?
和^H
作为python的退格
这样做
我会接受第一个选择,并同意
os.system("stty erase '^H'")
我会接受第二个,但第一个将不再可用。
我想用
raw_input("userinput>>")
获取输入
我能弄明白的唯一方法是实现我自己的shell,它不是在“基于原始的输入”上工作,而是在“基于字符的输入”上工作
有更好(更快)的主意吗?我不太清楚你的问题。在我看来,您需要一种从控制台到程序读取一些基于行的文本(包括一些特殊字符)的方法 无论您使用什么方法,如果在不同的控制台中读取此字符有特殊的含义,您应该面对一个控制台(不仅是系统特定的,而且是控制台特定的)问题,控制台中的所有文本将首先存储在缓冲区中,然后显示在屏幕上,最后处理并发送到您的程序。解决此问题的另一种方法是使用原始行获取控制台环境 您可以添加一个特殊的方法(decorator)来修饰原始输入(),或者添加一些输入方法来处理特殊的单词 在解决了那个问题之后 使用此代码段可以处理输入:
def pre():
textline=raw_input()
# ^? should replace to the specific value.
textline.replace("^?","^H")
return textline
为了更快,可以根据操作系统调用一些系统功能。但事实上,python中的IO对于普通作业来说已经足够快了。内置函数
raw\u input()
(或python 3中的input()
)将在导入库后自动使用它。这为您提供了一个漂亮且全面的行编辑器,并且它可能是您在可用平台上的最佳选择,只要您不介意Readline拥有一个传染许可证(GPL)。修复^?在erase dostty erase ^H
您的目标平台是否提供GNU readline?是的,包含readline-6.2软件包,然后您应该使用此软件包而不是raw\u input
,或者更准确地说,只需导入readline
即可使raw\u input()
自动使用它。有关如何重新绑定键等信息,请参阅。谢谢,我按照您的建议制作了…它非常有效。它似乎不会自动检测^H
或^?
,至少在带有原始输入的终端上是如此。我正在打印原始^H
字符。@ashgromnies:如果您有一个正确配置的终端和一个正确安装的GNU Readline版本,这种情况就不会发生。不幸的是,有太多的事情可能导致这种行为,以至于远程调试几乎是不可能的。@SvenMarnach我通过将“配置文件”菜单中退格的iTerm2键代码从^H
更改为^?
def pre():
textline=raw_input()
# ^? should replace to the specific value.
textline.replace("^?","^H")
return textline