繁体   English   中英

创建Python命令行应用程序

[英]Creating a Python command line application

所以我写了一个Python 3库,它作为一个应用程序'后端'。 现在我可以坐下来解释器,导入源文件,并使用lib进行黑客攻击 - 我知道如何做到这一点。

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

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

在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]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM