使用 pexpect 跳过子进程的 stdin 和 stderr
我正在使用 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'
如何关闭此功能?
I'm controlling a child process using pexpect
(because subprocess
doesn't support pty's and I run into a deadlock with two pipes). The process creates a lot of output on stderr
, in which I'm not interested, and apparantly pexpect
also echoes back anything I write to its stdin
:
>>> import pexpect
>>> p = pexpect.spawn('rev')
>>> p.sendline('Hello!')
7
>>> p.readline()
'Hello!\r\n'
>>> p.readline()
'!olleH\r\n'
How can I turn this off?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用 pty 与管道不太一样。如果您不进入原始模式,tty 驱动程序将回显字符并执行其他行编辑。因此,要获得干净的数据路径,您还需要将 pty/tty 置于原始模式。
由于您现在处理的是伪设备,因此您只有一个 I/O 流。 stdout 和 stderr 之间没有区别(这是用户空间约定)。因此,当使用 pty/tty 时,您总是会看到 stdout 和 stderr 混合在一起。
Using pty's is not quite the same as a pipe. If you don't put in in raw mode the tty driver will echo back the characters and perform other line editing. So to get a clean data path you need to also put the pty/tty in raw mode.
Since you are now dealing with a pseudo device you have only a single I/O stream. There is no distinction there between stdout and stderr (that is a userspace convention). So you will always see stdout and stderr mixed when using a pty/tty.