【发布时间】:2013-01-11 23:03:38
【问题描述】:
背景:我有一个 Python 子进程,它连接到一个类似 shell 的应用程序,它使用 readline 库来处理输入,并且该应用程序有一个用于命令输入的 TAB 完成例程,就像重击。生成子进程,如下所示:
def get_cli_subprocess_handle():
return subprocess.Popen(
'/bin/myshell',
shell=False,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
一切都很好,除了制表符完成。每当我的 Python 程序将制表符 '\t' 传递给子进程时,我会在 STDIN 中获得 5 个空格,而不是触发 readline 库的制表符完成例程。 :(
问题:我可以向子进程的 STDIN 发送什么来触发子进程的 tab-complete 功能?也许以另一种方式问:我如何发送 TAB key 而不是 TAB character,如果那是甚至可能?
相关但未得到答复和出轨:
trigger tab completion for python batch process built around readline
【问题讨论】:
-
可能这不是一个答案(当然,不是足够的解决方案),但是,你为什么不检查输入是否是 5 个连续的空格?可能序列转义 \t 被您的 shell 捕获并转换为 5 个空格
-
@Manuel - 实际上,我自己通过 re.sub() 注入了
'\t',所以我知道它不是 5 个空格。感谢您的仔细检查!
标签: python subprocess readline tab-completion