我正在創建一個使用子命令模式的命令行界面的Python包:kevlar count
,kevlar partition
等等。 CLI的工作原理非常奇妙,現在我試圖將CLI添加到我的Sphinx文檔中。在尋找解決方案時,我碰到了sphinxcontrib-autoprogram,這似乎正是我想要的,甚至明確地處理子命令。但是當我執行獅身人面像構建時,出現以下錯誤。抓取解析器後sphinxcontrib-autoprogram解析參數?
sphinx-build -b html -d _build/doctrees . _build/html
Running Sphinx v1.6.3
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 5 source files that are out of date
updating environment: 5 added, 0 changed, 0 removed
reading sources... [ 20%] cli
usage: sphinx-build [-h] [-v] [-l F] cmd ...
sphinx-build: error: argument cmd: invalid choice: 'html' (choose from 'reaugment', 'dump', 'novel', 'collect', 'mutate', 'assemble', 'filter', 'partition', 'count', 'localize')
make[1]: *** [html] Error 2
make: *** [doc] Error 2
這似乎是獅身人面像的擴展,不僅創造了argparse對象(預期),但也呼籲它(意外)parse_args()
。 「無效的」html
參數來自sphinx命令行構建調用,但被誤認爲是來自我的圖書館CLI的子命令之一。
我的語法似乎與sphinxcontrib-autoprogram文檔相匹配。
.. autoprogram:: cli:parser
:prog: kevlar
什麼可能導致此行爲?
我不知道,如果這些細節有關的問題,但如果他們是:
- 解析器在
kevlar/cli/__init__.py:parser()
- 定義每個命令的subparsers定義在專用文件中kevlar/cli/(例如kevlar/cli/count.py)
我不確定它是否有幫助,但是這個問題讓我想起了https://stackoverflow.com/q/6912025/407651(這是關於optparse而不是argparse)。 – mzjn