用pexpect跳过stdin和stderr的孩子

时间:2011-04-18 06:48:54

标签: python ipc pexpect pty

我正在使用pexpect控制子进程(因为subprocess doesn't support pty's并且我遇到了两个管道的死锁。这个过程会在stderr上创建大量输出,我对此并不感兴趣,并且显然pexpect也回复了我写给stdin的任何内容:

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

如何关闭此功能?

1 个答案:

答案 0 :(得分:3)

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

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