使用 pexpect 跳过子进程的 stdin 和 stderr

发布于 2024-11-02 04:02:25 字数 555 浏览 0 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睫毛溺水了 2024-11-09 04:02:25

使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文