2

私の関数の 1 つで、subprocess.check_call出力を生成する を使用して外部プログラムを呼び出しています。doctest を使用して、生成している出力が期待どおりのものであることを確認するにはどうすればよいですか?

4

1 に答える 1

2

多分これは助けることができます:

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()

ご覧のとおりstdoutsubprocess.check_call関数の引数を使用してコマンドの出力を取得できるようにしましたが、stdout引数を使用していない場合(これはあなたの場合だと思います)、コマンドをキャプチャするのは非常に難しいと思います出力。

これが希望的だったことを願っています:)

于 2011-06-10T09:58:49.067 に答える