os.popen呼び出しでドキュメントの例を汚染しないコマンドライン(ターミナル)から起動することを目的としたスクリプトをテストするためのpython doctest文字列を作成する方法はありますか?
#!/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]
popenを使用せずにdoctest.testmod()を実行すると、スクリプトがbash(またはDOS)シェルではなくpythonシェル内で実行されるため、テストが失敗するだけです。
LLNLの高度なPythonコースでは、.pyモジュールとは別のファイルにスクリプトを配置することを提案しています。ただし、doctest文字列は、引数の解析を行わずに、モジュールのみをテストします。そして、私のos.popen()アプローチは、サンプルのドキュメントを汚染します。もっと良い方法はありますか?