В одной из моих функций я вызываю внешнюю программу, используя subprocess.check_call
, которая будет выводить результат. Как я мог использовать doctest, чтобы убедиться, что результат, который он производит, - это тот, который я ожидаю?
Возможно, это может помочь:
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
(который я предполагаю, что это ваш случай), мне очень сложно захватить вывод команды.
Надеюсь, это было надежно:)