从pexpect中提取stderr

时间:2014-11-27 22:17:10

标签: python pexpect

我的问题很简单:我可以expect()使用pexpect在stderr上查看某些输出吗?似乎pexpect.spawn()只能用于期望stdout上的输出。

乌托邦的例子:

import pexpect child = pexpect.spawn(...) child.expect("hi", fd=pexpect.STDERR)

或者在散文中,"期待字符串' hi'在stderr"。

我在文档中未发现任何此类工具的提及,但我注意到child实例具有stderr属性...

一个半实现我想要的东西的hack是在生成的参数中将stderr重定向到stdout,然后我们可以使用常规的expect()。必须有更好的方法吗?

干杯

1 个答案:

答案 0 :(得分:2)

对于后代,并根据Thomas K的评论,这似乎做你想要的:

import os
import subprocess
from pexpect import fdpexpect

program = ['/path/to/command', '--arg1', 'value1', '--arg2', 'value2']
devNull = open(os.devnull, 'w')
command = subprocess.Popen(program, stdout=devNull,
                           stdin=subprocess.PIPE, stderr=subprocess.PIPE)
child = fdpexpect.fdspawn(command.stderr)
child.expect('hi')