嗨,我正在编写一个伪终端,它可以存在于一个 tty 中并产生第二个 tty,它是过滤输入和输出的
我现在用python写,产生第二个tty,读写很容易
但是当我阅读时,阅读并没有结束,它会等待更多的输入。
import subprocess
pfd = subprocess.Popen(['/bin/sh'], shell=True,
stdout=subprocess.PIPE, stdin=subprocess.PIPE)
cmd = "ls"
pfd.stdin.write(cmd + '\n')
out = ''
while 1:
c = pfd.stdout.read(1)
if not c: # if end of output (this never happends)
break
if c == '\n': # print line when found
print repr(out)
out = ''
else:
out += c
----------------------------- 输出 -------------------- ----
intty $ python intty.py
'intty.py'
'testA_blank'
'testB_blank'
(hangs here does not return)
看起来它已经到达 hte 缓冲区的末尾,而不是返回 None 或 '' 它挂起等待更多输入。
我应该寻找什么来查看输出是否已完成?缓冲区结束?一个不可打印的字符?
- - - - - - - - 编辑 - - - - - - -
当我运行 xpcshell 而不是 ls 时也会发生这种情况,我假设这些交互式程序有某种方式知道再次显示提示,奇怪的是提示,在这种情况下“js>”永远不会出现