所以我写了一个Python 3库,它作为一个应用程序'后端'。现在我可以坐下翻译,导入源文件,并使用lib进行黑客攻击 - 我知道如何做到这一点。
但我还想建立一个命令行' frontent'使用该库的应用程序。我的库定义了一些具有高级命令的对象,应用程序应该可以看到这些命令。这些命令可以返回一些数据结构,高级命令可以很好地打印它们。换句话说,命令行应用程序将是lib周围的瘦包装器,将她的输入传递给库命令,并将结果呈现给用户。
我尝试实现的最好的例子可能是Mercurial SCM,因为它是用Python编写的,并且是' hg'命令执行我正在寻找的 - 例如,' hg commit -m message'会找到负责“提交”的代码。命令实现,传递用户的参数并完成其工作。在回来的路上,它可能会得到一些结果并很好地打印出来。
在Python中有一般的方法吗?就像把类/方法/功能暴露为高级别的'带注释的命令?有人知道任何教程吗?
答案 0 :(得分:1)
您可以使用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
。