Python doctest для сценариев оболочки, которые проверяют синтаксический анализ аргументов, не загрязняя строку документации с помощью os.popen()

Есть ли способ написать строку doctest python для проверки сценария, предназначенного для запуска из командной строки (терминала), который не загрязняет примеры документации с вызовами os.popen?

#!/usr/bin/env python
# filename: add
"""
Example:
>>> import os
>>> os.popen('add -n 1 2').read().strip()
'3'
"""

if __name__ == '__main__':
    from argparse import ArgumentParser
    p = ArgumentParser(description=__doc__.strip())
    p.add_argument('-n',type = int, nargs   = 2, default = 0,help  = 'Numbers to add.')
    p.add_argument('--test',action = 'store_true',help  = 'Test script.')
    a = p.parse_args()
    if a.test:
        import doctest
        doctest.testmod()
    if a.n and len(a.n)==2:
        print a.n[0]+a.n[1]

Запуск doctest.testmod()без использования popen просто приводит к сбою теста, поскольку скрипт запускается в оболочке python, а не в оболочке bash (или DOS).

Продвинутый курс по python в LLNL предлагает помещать скрипты в файлы, которые отделены от модулей.py. Но тогда строки doctest только проверяют модуль без разбора аргументов. И мой подход os.popen()загрязняет документацию по примерам. Есть ли способ лучше?

8
задан hobs 2 April 2012 в 09:26
поделиться