Есть ли способ написать строку 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() загрязняет документацию по примерам. Есть ли способ лучше?
main
? Выполните синтаксический анализ аргумента в блокеif __main__
, затем вызовитеmain(parsed_args)
- person Daenyth   schedule 02.04.2012