1

我正在使用控制子进程pexpect(因为subprocess 不支持 pty并且我遇到了两个管道的死锁)。该过程在 上创建了很多stderr我不感兴趣的输出,并且显然pexpect还回显了我写给它的任何内容stdin

>>> import pexpect
>>> p = pexpect.spawn('rev')
>>> p.sendline('Hello!')
7
>>> p.readline()
'Hello!\r\n'
>>> p.readline()
'!olleH\r\n'

我怎样才能关闭它?

4

1 回答 1

3

使用 pty 与管道并不完全相同。如果您不进入原始模式,tty 驱动程序将回显字符并执行其他行编辑。因此,要获得干净的数据路径,您还需要将 pty/tty 置于原始模式。

由于您现在处理的是伪设备,因此您只有一个 I/O 流。stdout 和 stderr 之间没有区别(这是用户空间约定)。因此,在使用 pty/tty 时,您总是会看到 stdout 和 stderr 混合在一起。

于 2011-04-18T10:48:22.470 回答