我编写了一个脚本,该脚本在附加到新PTY的子进程中启动SSH,我想在附加到脚本stdi / o的原始终端与该子进程的PTY之间传递所有数据和终端控件,以进行交互式控制SSH会话,可以检查和/或修改脚本中的数据。
我设法成功传递数据,但不能控制字符,这破坏了像Vim这样的TUI应用程序。有示例如何在两个PTY之间传递终端控制吗?还是有更好的方法?这是我现在拥有的简化代码段:
master, slave = pty.openpty()
p = subprocess.Popen(['ssh', 'example.com'], stdin=slave, stdout=slave, stderr=slave)
streams = {
sys.stdin.fileno(): master,
master: sys.stdout.fileno(),
}
while True:
readlist = list(streams.keys())
(rtr, rtw, err) = select.select(readlist, [], readlist, 1.0)
for inp in rtr:
outp = streams[inp]
data = os.read(inp, 4096)
# ... inspect or modify data here ...
os.write(outp, data)