我有一個Python模塊,我正在編寫一個使用Sphinx的教程,包括doctests。有沒有辦法使用doctest和sphinx來測試和記錄命令行應用程序?
該模塊附帶一些幫助程序。
我想在文檔和中包含這些幫助程序doctest檢查標準輸出在當前程序版本和文檔之間是否同步。
我想我可以使用sh模塊或popen來檢查給定程序的標準輸出,但我更喜歡這些技巧不會顯示在文檔中,否則非程序員用戶肯定會丟失。
有沒有辦法做到這一點?
我有一個Python模塊,我正在編寫一個使用Sphinx的教程,包括doctests。有沒有辦法使用doctest和sphinx來測試和記錄命令行應用程序?
該模塊附帶一些幫助程序。
我想在文檔和中包含這些幫助程序doctest檢查標準輸出在當前程序版本和文檔之間是否同步。
我想我可以使用sh模塊或popen來檢查給定程序的標準輸出,但我更喜歡這些技巧不會顯示在文檔中,否則非程序員用戶肯定會丟失。
有沒有辦法做到這一點?
doctest模塊只檢查可以從python交互式提示符運行的語句。
命令行工具可以從Python交互式提示符下使用subprocess模塊調用:
# Create Helper Function
>>> import subprocess
>>> run_commandline = lambda cmd: subprocess.check_output(cmd, shell=True).decode()
# Doctestable command-line calls
>>> print(run_commandline('cal 7 2017'))
July 2017
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
>>> print(run_commandline('echo $BASH_VERSION'))
3.2.57(1)-release
有可能一些方法來破解文檔測試或獅身人面像,讓你更直接地想要的東西,但這種技術的用途Doctest,sphinx和subprocess的廣告API完全按照它們設計的方式使用(doctest被設計爲重放docstrings中的交互式提示會話,subprocess被設計爲直接從python運行命令行工具並捕獲它們的輸出)。
我想我可以使用SH模塊,或popen方法檢查一個給定程序的標準 輸出,但我更喜歡那些招數不顯示 成的文檔,或者非程序員用戶將當然 失去。
兩個想法:首先,這些調用的細節大多可以隱藏在輔助函數中以最大限度地減少分心。其次,如果您需要從Python調用命令行程序,使用popen或子進程並不是一個竅門,因爲這些是專門爲從Python進行調用而設計的工具。
爲什麼downvotes? – jterrace
可能的重複http://stackoverflow.com/questions/10886841/sphinx-and-argparse-autodocumenting-command-line-scripts –
我不認爲這是重複的。另一個問題僅僅是關於自動文檔。這主要是關於一個更有趣的話題,使用doctest來測試命令行工具。 –