doctest
предназначен для запуска кода на Python, поэтому вам нужно где-то выполнить преобразование.Если вы намерены протестировать интерфейс командной строки напрямую через doctest
, одна из возможностей состоит в том, чтобы выполнить подстановку регулярного выражения в __doc__
, прежде чем передать его в argparse
, чтобы извлечь оболочку os.popen
:
clean = re.sub(r"^>>> os\.popen\('(.*)'\).*", r"% \1", __doc__)
p = ArgumentParser(description=clean, ...)
(Конечно, есть разные способы сделать это лучше, в зависимости от того, что вы считаете "хорошим").
Это очистит его для конечного пользователя.Если вы также хотите, чтобы в исходном коде он выглядел чище, вы можете пойти другим путем: поместите примеры командной строки в строку документации и не используйте doctest.testmodule ().Запустите вашу строку документации через doctest.script_from_examples
и постобработайте ее, чтобы вставить вызовы os
.(Затем вам нужно будет встроить его во что-то, чтобы вы могли проверить его с помощью run_docstring_examples
.) doctest
не имеет значения, является ли ввод допустимым Python, поэтому вы можете сделать следующее:
>>> print doctest.script_from_examples("""
Here is a commandline example I want converted:
>>> add -n 3 4
7
""")
# Here is a commandline example I want converted:
add -n 3 4
# Expected:
## 7
Это по-прежнему будет отображать приглашение Python >>>
в справке.Если это вас беспокоит, возможно, вам придется обработать строку в обоих направлениях.