如何将Tab键发送到python子进程的stdin
问题内容:
背景:
我有一个Python子进程,该子进程连接到类似shell的应用程序,该应用程序使用readline库处理输入,并且该应用程序具有TAB完整的例程来执行命令输入,就像bash一样。生成子进程,如下所示:
def get_cli_subprocess_handle():
return subprocess.Popen(
'/bin/myshell',
shell=False,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
一切正常,除了制表符完整。每当我的Python程序将tab字符传递'\t'
给子进程时,我在STDIN中获得5个空格,而不是触发readline库的tab-
complete例程。:(
问题: 我可以发送什么到子进程的STDIN来触发孩子的制表符完成功能?也许以另一种方式问:如果可能的话,我该如何发送TAB 密钥
而不是TAB 字符 ?
相关但未回答且出轨:
问题答案:
类似shell的应用程序可能会区分连接到stdin的终端和连接到stdin的管道。许多Unix实用程序只是为了优化其缓冲(行与块)而这样做,而类似于shell的实用程序可能会禁用批输入(即PIPE)上的命令完成功能,以避免意外结果。命令完成实际上是一项交互式功能,需要终端输入。
检出pty
模块,并尝试使用主/从对作为子流程的管道。