python 如何实现类似于input()但处理转义字符的简单终端行编辑

new9mtju  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(140)

我怎样才能实现一个Python函数在Unix系统(最低限度,只有Linux)上运行,它类似于内置的input(),但支持使用escape键取消输入文本?

  • 在命令行中输入单行文本(也可以输入多行)
  • 具有简单的行编辑功能(左/右箭头键,退格键删除字符,control-a跳到行首,control-e跳到行末,control-w删除单词)
  • (并且允许从X/wayland中的主选择或剪贴板选择粘贴--我想这不需要特殊的支持)
  • 按回车键提交文本
  • 或者按escape键退出并取消(如果我不能区分这与用户输入空字符串并按return键之间的区别,这是可以的,但并不理想)

我怎样才能做到呢?
我尝试过curses,但那是针对全屏输入的--似乎很难实现不清除屏幕的东西。
我试过termios,但我不知道如何实现退格键,我怀疑我可能最终想要比现在明显的功能多一点的功能--例如control-w,它在我的linux机器input()上实现了删除整个单词,我不需要重现input()行为的每一个细节,但需要类似的一些东西(见上面的列表)。

bqf10yzr

bqf10yzr1#

例如,您可以使用readline

#! /usr/bin/env python3

import readline

input('hello: ')

这将考虑您的~/.inputrc设置。您可以配置editing-mode来控制使用哪个默认的键绑定集。默认情况下,Readline在Emacs编辑模式下启动,其中的击键与Emacs最相似。此变量可以设置为emacsvi

相关问题