Python 二级命令行参数

有时脚本命令需要比较复杂的二级命令,例如说 git addgit commit,有独立的一套参数。而同时对这些命令本身可能也有命令修饰。这时就希望将命令行参数分解成两个部分,得到 (cmd, args)。其中 cmd 是一级的命令,指示要进行何种操作。args 是这个命令的参数列表,每个项可以是 - 或者 -- 开头的选项,也可以其它的。

Python 的 argparse 模块已经想到了这个需求。只需要如下这样做即可:

import argparse
import sys

def get_cmd_args():
    ap = argparse.ArgumentParser()
    ap.add_argument('cmd')
    ap.add_argument('args', nargs=argparse.REMAINDER)
    args = ap.parse_args()
    return args.cmd, args.args

def main():
    cmd, args = get_cmd_args()
    print(cmd, args)

main()

选择合适的 cmd 之后,再对剩余的 args 调用 ap.parse_args(args),即可做到二级管理。

此外,Google 开源过一个包叫做 fire。提供更便捷的命令行解析。

#! /use/bin/env python3
# This is cli.py
import fire

class Cli:
  def cmd1(self, arg1, arg2):
    # cmd1 arg1 arg2
    pass
  def cmd2(self, arg1, opt=1):
    # cmd2 arg2 --opt=2
    pass
  def cmd3(self, *args):
    # cmd3 arg1 [arg2 ...]
    pass

fire.Fire(Cli)

也可以做到二级命令管理,但显得有些粗放。

你可能感兴趣的:(Python 二级命令行参数)