Python命令列引數解析模組argparse

昀溪發表於2019-01-13

當寫一個Python指令碼時經常會遇到不同引數不同功能的情況,如何做一個更好看的命令幫助資訊以及對命令引數解析呢?

這就需要使用argparse模組

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import argparse

__metaclass__ = type


class Inventory:
    def __init__(self):
        self._read_cli_args()

        if self._args.list:  # 如果輸入的引數為 --list 那麼將執行這裡
            print("list")
        elif self._args.host:
            print(self._args.host)

    def _read_cli_args(self):
        # 建立一個解析物件
        parser = argparse.ArgumentParser(description='這是命令的說明描述資訊')
        # required=True 表示必須提供該引數
        parser.add_argument("--type", "-t", required=True, help="型別 tomcat|dubbo")
        """
        向物件新增你要關注的命令列引數 一般寫兩個 一個長參 一個短參  action表示值賦給鍵的方式 布林值(store_true|store),
        當讀取的引數中出現指定的引數時的行為,也就是儲存True還是False
        我這裡寫的是 store_true 表示輸入 inventory.py --list 後,你獲取list值就是true否則就是false
        """
        parser.add_argument("--list", "-l", action="store_true", help="--list 引數功能說明")
        # store的含義是需要在 --host 接收一個引數,並把這個引數儲存到這個host中
        parser.add_argument("--host", action="store", help="--host 引數功能說明")
        # 為引數值指定可選範圍,也就是這個引數的值只能是 0 1 2 其中之一,且預設值為1
        parser.add_argument("-c", "--mychoice", type=int, choices=[0, 1, 2], default=1,
                            help="我的選擇")
        self._args = parser.parse_args()  # 進行解析
        # 解析完成後,self_args包含了所有必要的命令引數和值,如果想要獲取那麼就 self._args.鍵 來獲取
        print(self._args)


def main():
    Inventory()

if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()

幫助

相關文章