import argparse 命令行傳遞參數 代碼參數分離

argparse 是python自帶的命令行參數解析包,可以用來方便地讀取命令行參數,當你的代碼需要頻繁地修改參數的時候,使用這個工具可以將參數和代碼分離開來,讓你的代碼更簡潔,適用範圍更廣。
該例子基本概括我們常用的代碼參數分類要求。

import argparse
def main():
	# 參數解析器
    parser = argparse.ArgumentParser(description="Demo of argparse")
    
    # 增加參數
    parser.add_argument("parg_first") 
    # 注意設置了這個位置參數,就需要代碼執行時向第一個參數傳值,
    # 不然會報錯,一般不建議使用位置參數,除非需要輸入的參數較少            
    # 位置參數,第一個參數賦值給parg_first 

    parser.add_argument('-n','--name', default='Mr.Li')  
    #可選參數:通過一個-來指定的短參數,如-h;通過–來指定的長參數,如- -help
    # 這裏設置'--name'的含義是接受-n "name" 同時也接受--n "name"輸入格式,以及--name “name”

    parser.add_argument('-y','--year', default='20')
    parser.add_argument("-digit", type=int, help="輸入數字") 
    # parser.add_argument("-de", type=int, help="輸入數字") 
    # 上面這行將會出錯,因爲與上面的-digit在使用-d作爲標識時有衝突,因此一般定義都要定義-y --year兩種方式,這樣就不會出錯
    # 如果沒有定義default,數據參數爲None
    # 通過 -echo xxx聲明的參數,爲int類型, help參數是當運行Python .py -h時的提示信息

    # 獲取解析參數
    # Namespace(digit=None, name='zjq', parg_first='woshi', year='2020')
    args = parser.parse_args() 
    print(args)

    # 獲取解析參數轉化爲字典 
    # {'parg_first': 'woshi', 'name': 'zjq', 'year': '2020', 'digit': None}
    args_dict = vars(parser.parse_args()) 
    print(args_dict)

    name = args.name
    year = args.year
    parg_first = args.parg_first

    print(f'Hello {name}  {year} {parg_first}')
    # Hello zjq  2020 woshi
    
if __name__ == '__main__':
    main()
zjq@DESKTOP-O28RVV3:9_測試文件夾$ python argparse_test.py woshi -n zjq -y 2020 -d 256
Namespace(digit=256, name='zjq', parg_first='woshi', year='2020')
{'parg_first': 'woshi', 'name': 'zjq', 'year': '2020', 'digit': 256}
Hello zjq  2020 woshi
zjq@DESKTOP-O28RVV3:9_測試文件夾$

總結:建議使用添加參數格式如下
parser.add_argument("-d","-digit", default=2020,type=int, help="輸入數字")

下面的例子解釋命令執行方式

import argparse
def main():
	# 參數解析器
    parser = argparse.ArgumentParser(description="Demo of argparse")
    
    # 增加參數
    parser.add_argument("-d", type=int, default=2020, help="數字功能")             
    parser.add_argument("-name", "--na", default="zjq", help="名字")
    # 獲取解析參數
    args = parser.parse_args() 
    print(args)

    # 獲取解析參數轉化爲字典 
    args_dict = vars(parser.parse_args()) 
    print(args_dict)

    print(args.d, "="*5, args.na) 
    # 如果定義了--, 則以引用--爲準, 但是在命令執行時
    # 可以依然可以使用-n 或者-na 或者-name
    
if __name__ == '__main__':
    main()

'''
zjq@DESKTOP-O28RVV3:9_測試文件夾$ python argparse_test.py -d 256 -n zj2
Namespace(d=256, na='zj2')
{'d': 256, 'na': 'zj2'}
256 ===== zj2
zjq@DESKTOP-O28RVV3:9_測試文件夾$ python argparse_test.py -d 256 -na zj2
Namespace(d=256, na='zj2')
{'d': 256, 'na': 'zj2'}
256 ===== zj2
zjq@DESKTOP-O28RVV3:9_測試文件夾$ python argparse_test.py -d 256 -name zj2
Namespace(d=256, na='zj2')
{'d': 256, 'na': 'zj2'}
256 ===== zj2
zjq@DESKTOP-O28RVV3:9_測試文件夾$
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章