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_測試文件夾$
'''