python - 创建 Python 命令行应用程序

标签 python

所以我写了一个 Python 3 库,作为应用程序的“后端”。现在我可以和解释器一起坐下来,导入源文件,然后使用 lib 进行破解 - 我知道如何做到这一点。

但我还想使用该库构建一个命令行“前端”应用程序。我的库定义了一些具有高级命令的对象,应用程序应该可以看到这些命令。这样的命令可能会返回一些数据结构,高级命令会很好地打印它们。换句话说,命令行应用程序将是 lib 的薄包装,将她的输入传递给库命令,并将结果呈现给用户。

我试图实现的最好的例子可能是 Mercurial SCM,因为它是用 Python 编写的,'hg' 命令可以满足我的要求 - 例如,'hg commit -m message'将找到负责“提交”命令实现的代码,传递来自用户的参数并完成其工作。在返回的路上,它可能会得到一些结果并很好地打印出来。

在 Python 中有通用的方法吗?就像将类/方法/函数公开为带有注释的“高级”命令一样?有人知道任何教程吗?

最佳答案

您可以使用 argparse 执行此操作.例如,这是我的 deploy 的开始脚本。

def main(argv):
    """
    Entry point for the deploy script.

    Arguments:
        argv: All command line arguments save the name of the script.
    """
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-v', '--verbose', action='store_true',
                        help='also report if files are the same')
    parser.add_argument('-V', '--version', action='version',
                        version=__version__)
    parser.add_argument('command', choices=['check', 'diff', 'install'])
    fname = '.'.join(['filelist', pwd.getpwuid(os.getuid())[0]])
    args = parser.parse_args(argv)

它使用带有选项的参数来选择一个函数。您可以定义一个将选项映射到函数的字典;

cmds = {'check': do_check, 'diff': do_diff, 'install': do_install}
fn = cmds[args.command]

如果您确保所有字典键都在命令选项中,则不需要捕获 KeyError

关于python - 创建 Python 命令行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059070/

相关文章:

python - GAE/P存储SES连接和线程安全

python - sqlalchemy现有数据库查询

python - Azure func 在使用 Core Tools 4.0.5030 的 M1 Mac 上启动失败

python - 将列名称与 pySpark ML 中的模型参数相关联

python - 尝试在 mac os leopard 上安装 lxml

Python OpenCV 访问网络摄像头最大分辨率

Python/Pygame : 2d angular momentum/inertia

python - 如何从 python GUI (IDLE) 检查 wxPython 版本?

Python 正则表达式 - 在搜索过程中忽略序列

python - 将 pandas 样式表导出到图像文件