【发布时间】:2014-11-27 22:17:10
【问题描述】:
我的问题很简单:我可以expect() 使用 pexpect 在 stderr 上查看某些输出吗?看来pexpect.spawn() 只能用于期望在标准输出上的输出。
乌托邦式的例子:
import pexpect
child = pexpect.spawn(...)
child.expect("hi", fd=pexpect.STDERR)
或者在散文中,“在 stderr 上期待字符串 'hi'”。
我没有在文档中找到任何提及此类工具的内容,但我确实注意到 child 实例具有 stderr 属性...
半实现我想要的一个技巧是将stderr重定向到spawn参数中的stdout,然后我们可以使用常规expect()。一定有更好的办法吗?
干杯
【问题讨论】:
-
Pexpect 在 pty 中运行您的子进程,因此所有标准流(stdin、stdout 和 stderr)都指向该 pty,并且控制进程写入和读取该单个 pty。它无法分别访问 stdout 和 stderr:它们将在输出中交错,就像在常规终端中运行进程一样。如果您需要单独访问,您可以使用
subprocess.Popen启动该过程,然后使用pexpect.fdpexpect.fdspawn只查看其中一个管道。 -
谢谢。听起来它会起作用。你有一个例子,我会把它标记为答案:)