使用 Python argparse:如何處理命令列參數

WBOY
發布: 2023-04-22 15:28:18
轉載
1177 人瀏覽過

    一、前言

    argparse是python的一個命令列參數解析包,在程式碼需要頻繁修改參數時,方便使用,主要用法就是在命令列輸入自己想要修改的參數。

    二、關於argparse用法常用框架

    import argparse
    
    def get_parser():
    
        # argparse.ArgumentParser生成argparse对象 description为描述信息,当在命令行输入需要显示帮助信息时,会显示
    
        parser = argparse.ArgumentParser(description="pytorch unet training")
    
        # 路径参数设置 help为参数的帮助信息
    
        parser.add_argument("--data_path", default="./", help="DRIVE root")
    
        # 预测类别数量 type如果不指定需要输入的是str类型
    
        parser.add_argument("--num_classes", default=1, type=int)
    
        # 指定设备使用
    
        parser.add_argument("--device", default="cuda", help="training device")
    
        # 指定batch size大小 "-b", "--batch_size"表示两个都可以在命令行使用
    
        parser.add_argument("-b", "--batch_size", default=4, type=int)
    
        return parser
    
    if __name__ =='__main__':
    
        parser = get_parser()
    
        args = parser.parse_args()
    
        print(args)
    登入後複製

    如上get_parser()為本文會介紹的一些使用方法,這個python檔案名為python_argparse_test1.py,其中

    #parser = argparse.ArgumentParser(description="pytorch unet training")用來建立parser物件

    add_argument()用來增加參數

    args = parser.parse_args()中parse_args()取得解析的參數

    1.取得參數清單

    當命令列輸入python python_argparse_test1.py時,印出args取得到的參數得到:

    Namespace(batch_size=4, data_path ='./', device='cuda', num_classes=1)

    表示這個參數解析器解析到的參數清單

    2.取得幫助資訊

    輸入python python_argparse_test1.py -h或者python python_argparse_test1.py --help顯示信息,其中usage顯示了它的用法,pytorch unet training為創建對象時的description,再下面是各個參數信息與用法

    使用 Python argparse:如何處理命令列參數

    3.命令列修改參數

    import argparse
    
    def get_parser():
    
        # argparse.ArgumentParser生成argparse对象 description为描述信息,当在命令行输入需要显示帮助信息时,会显示
    
        parser = argparse.ArgumentParser(description="pytorch unet training")
    
        # 路径参数设置 help为参数的帮助信息 default为默认参数
    
        parser.add_argument("--data_path", default="./", help="DRIVE root")
    
        # 预测类别数量 type如果不指定需要输入的是str类型
    
        parser.add_argument("--num_classes", default=1, type=int)
    
        # 指定设备使用
    
        parser.add_argument("--device", default="cuda", help="training device")
    
        # 指定batch size大小 "-b", "--batch_size"表示两个都可以在命令行使用
    
        parser.add_argument("-b", "--batch_size", default=4, type=int)
    
        return parser
    
    if __name__ =='__main__':
    
        parser = get_parser()
    
        args = parser.parse_args()
    
        print("data_path: ",args.data_path)
    
        print("num_classes: ", args.num_classes)
    登入後複製

    命令列輸入:python python_argparse_test1.py --data_path Desktop --num_classer 4,得到結果如下:

    data_path: Desktop

    num_classes:  4

    #可以看到透過命令列確實修改了參數

    4.'_'與"__"的使用

    if __name__ =='__main__':
    
        parser = get_parser()
    
        args = parser.parse_args()
    
        print("-b: ",args.b)
    
        print("--batch_size: ", args.batch_size)
    登入後複製

    命令列輸入python python_argparse_test1.py -b 10 --batch_size 20,這時會報錯:

    使用 Python argparse:如何處理命令列參數

    ##這是因為當'_'和'__'同時存在時,系統預設後者為參數名稱

    把上述程式碼改為:

    if __name__ =='__main__':
    
        parser = get_parser()
    
        args = parser.parse_args()
    
        print("--batch_size: ",args.batch_size)
    登入後複製

    但命令列不受影響,繼續執行指令python python_argparse_test1.py -b 10得到:

    --batch_size:  10

    5.type的使用

    type會把輸入的命令列字元強制轉換為type的類型

    if __name__ =='__main__':
    
        parser = get_parser()
    
        args = parser.parse_args()
    
        print("--batch_size type: ",type(args.batch_size))
    登入後複製

    命令列輸入:python python_argparse_test1 .py --batch_size  '10'得到:

    --batch_size type: 

    6.required:用來表示這個參數是否需要提供

    parser.add_argument("--num_classes", default=1, type=int, required=True)
    登入後複製

    如果輸入指令python python_argparse_test1.py

    這將會報錯提示確實需要的參數

    python_argparse_test1.py: error: the following arguments are required: --num_classes

    7.choices選擇參數    

    parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])
    登入後複製
    如果執行指令:python python_argparse_test1.py -arch cnn

    ##這將會報錯

    python_argparse_test1.py: error: argument -

    #python_argparse_test1.py: error: argument - arch: invalid choice: 'cnn' (choose from 'alexnet', 'vgg')

    以上是使用 Python argparse:如何處理命令列參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板