背景:我有一个python程序,它导入并使用readline模块来构建一个自制的命令行界面。我有第二个 python 程序(围绕瓶子构建,一个 Web 微框架)充当该 CLI 的前端。第二个 python 程序打开一个类似于管道的接口到第一个,本质上是在两者之间来回传递用户输入和 CLI 输出。
问题:在外包装程序(Web 界面)中,每当最终用户按下 TAB 键(或我绑定 readline 完成函数的任何其他键)时,该键都会插入到 CLI 的标准输入中,而不会触发 readline 完成函数. 我需要它来触发 readline 的命令完成功能,这通常发生在交互式 CLI 会话期间。
可能的解决方案#1:是否有某种方法可以将 TAB 键发送到子进程的标准输入,以便批处理使用与交互式使用相同?
可能的解决方案#2:或者,如果有某种方法可以手动触发整个完成过程(包括匹配生成和显示),我可以插入并扫描特殊的文本序列,例如手动"<TAB_KEY_HERE>"
触发可能的完成匹配显示功能。(我编写了完成函数,它生成可能的匹配项,所以我真正需要的是访问 readline 的函数来显示可能的匹配项。)
可能的解决方案#3: 我猜,如果我无法访问readline的matches-display函数,最后一个选择是重写readline的内置显示完成函数,这样我就可以直接调用它了。:(
有更好的解决方案吗?关于遵循上述任何解决方案提出的路径的任何建议?我被困在#1 和#2,我试图避免#3。
谢谢!