如何检查doctest程序是否产生了某些输出?

时间:2011-06-10 08:31:28

标签: python doctest

在我的一个函数中,我使用subprocess.check_call调用外部程序,这将产生输出。我如何使用doctest来确保它产生的输出是我期待的输出?

1 个答案:

答案 0 :(得分:1)

也许这会有所帮助:

import sys
import tempfile
import subprocess


def example(output):
    r""" Do something ...

    >>> output = example('Processing file ...')
    >>> print output # doctest:+ELLIPSIS
    'Processing file ...'

    Check how many file was processed.
    >>> [line.startswith('Processing file')
    ... for line in output.splitlines()].count(True)
    1    

    """
    cmd = "print '%s'" % (output, )
    with tempfile.TemporaryFile() as output:
        subprocess.check_call([sys.executable, '-c', cmd], stdout=output)
        output.seek(0)
        res = output.read()

    return res

if __name__ == '__main__':
    import doctest
    doctest.testmod()

正如您所看到的,我使用了stdout函数的subprocess.check_call参数,以便能够获取命令的输出,如果您没有使用stdout参数(我认为这是你的情况)我认为很难捕获命令输出。

希望这是有希望的:)