【问题标题】:Is there a way to use doctest and sphinx to test and document command line applications?有没有办法使用 doctest 和 sphinx 来测试和记录命令行应用程序?
【发布时间】:2014-04-03 16:24:43
【问题描述】:

我有一个 Python 模块,我正在为此编写一个使用 Sphinx 的教程,包括 doctests。

这个模块带有一些帮助程序。

我想将这些帮助程序包含在文档中并且让 doctest 检查当前程序版本和文档之间的标准输出是否同步。

我想我可以使用 sh 模块或 popen 来检查给定程序的标准输出,但我更希望这些技巧不会出现在文档中,否则非程序员用户肯定会迷失方向。

有没有办法做到这一点?

【问题讨论】:

  • 我不认为这是重复的。另一个问题仅与自动文档有关。这是关于一个更有趣的主题的主要内容,使用 doctest 来测试命令行工具。

标签: python subprocess command-line-interface python-sphinx doctest


【解决方案1】:

doctest 模块仅检查可以从 python 交互式提示符运行的语句。

可以使用subprocess 模块从 python 交互式提示符调用命令行工具:

# 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 以更直接地获得您想要的东西,但这种技术使用宣传的 doctest、sphinx 和 subprocess API 的方式与它们的设计使用方式完全相同(doctest 旨在重放文档字符串中的交互式提示会话,子进程旨在直接从 python 运行命令行工具并捕获它们的输出。

我想我可以使用 sh 模块,或者 popen 来检查标准 给定程序的输出,但我更喜欢这些技巧不显示 进入文档,否则非程序员用户肯定会 丢了。

两个想法:首先,这些调用的细节大多可以隐藏在辅助函数中,以尽量减少分心。其次,如果您需要从 Python 调用命令行程序,那么使用 popensubprocess 并不是一个技巧,因为它们是专门为进行这些调用而设计的工具来自 Python。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2020-04-28
    • 2021-03-18
    • 2021-04-09
    • 2020-12-30
    相关资源
    最近更新 更多