本文主要針對argparse模塊進行介紹
第一部分,簡要說明一下argparse的作用、使用場景
第二部分,簡要說明使用的三部曲,以及命令行的使用方式(具體實踐在使用方法介紹中,都會進行使用,可進行觀察)
第三部分,著重介紹如何添加參數,並進行驗證(必填參數、非必填參數、每個參數不同屬性的定義)
第四部分,進行補充說明
使用場景:在服務器上運行python程序時,不想通過改變代碼,而直接通過命令將參數引入程序
作用:
1)參數命令行來進行解析
2)實現參數和代碼的分離,方便參數的修改
3)實現私人定制化,並自動生成幫忙文檔,輔助程序的使用
1.創建對象
parser = argparse.ArgumentParser()
2.增加參數(定義參數,此處在第三部分進行展開講述)
parser.add_argument()
3.解析
args = parser.parse_args()
args.自定義的參數名
在腳本中,通常 parse_args() 會被不帶參數調用,而 ArgumentParser 將自動從 sys.argv 中確定命令行參數。
4.使用方式
在終端輸入:python3 文件名.py 必填的參數 非必填的參數0 非必填參數0對應的值 非必填的參數1 非必填參數1對應的值 。。。。
下面以默認的-h(–help)為例展示:
python3 learnTest.py --help
learnTest.py為執行py文件
執行結果如下:
-h、–help:對命令行參數進行說明
說明:後續自定義後,-h也會進行展示
在使用,主要是對參數的定義涉及比較多(各個參數,穿插到下面的實例中進行驗證),
add_argument() 方法定義如何解析命令行參數
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每個參數解釋如下(*:表示在本文進行了使用):
name or flags - 選項字符串的名字或者列表,例如 foo 或者 -f, --foo。
*action - 命令行遇到參數時的動作,默認值是 store。
store_const,表示賦值為const;
append,將遇到的值存儲成列表,也就是如果參數重復則會保存多個值;
append_const,將參數規范中定義的一個值保存到一個列表;
count,存儲遇到的次數;此外,也可以繼承 argparse.Action 自定義參數解析;
nargs - 應該讀取的命令行參數個數,可以是具體的數字,或者是?號,當不指定值時對於 Positional argument 使用 default,對於 Optional argument 使用 const;或者是 * 號,表示 0 或多個參數;或者是 + 號表示 1 或多個參數。
const - action 和 nargs 所需要的常量值。
*default - 不指定參數時的默認值。
*type - 命令行參數應該被轉換成的類型。
*choices - 參數可允許的值的一個容器。
required - 可選參數是否可以省略 (僅針對可選參數)。
*help - 參數的幫助信息,當指定為 argparse.SUPPRESS 時表示不顯示該參數的幫助信息.
metavar - 在 usage 說明中的參數名稱,對於必選參數默認就是參數名稱,對於可選參數默認是全大寫的參數名稱.
dest - 解析後的參數名稱,默認情況下,對於可選參數選取最長的名稱,中劃線轉換為下劃線
直接定義參數,無“-”或者“–”代表為必填參數
help:可填寫定義參數的含義,幫助用戶的使用,增加程序的可讀性
parser = argparse.ArgumentParser(description='該程序主要講述argparse模塊的使用')
parser.add_argument("p0", help="沒有\"-\"或者\"--\",所以為必填參數,如填寫將會報錯")
args = parser.parse_args()
print(args.p0)
由上圖可以看出:
1)當添加自定義參數時,help參數可以幫助進行展示參數的信息
2)當使用python3 XXX.py test時:
代碼中添加了p0這個參數
在執行命令時,自動將“test”這個參數值賦給p0,即:p0 = test
3)如果命令中不填寫必填參數值時,將會報錯,告訴你需要p0參數
使用“-”或者“–”定義可選參數
type:命令行參數應該被轉換成的類型,如果類型不正確則會進行報錯
默認情況,如未指定類型,將會按照字符串進行存儲
由上圖可看出,當指定類型為int後,再輸入字符串將會進行報錯
上圖中執行的命令行未進行定義可選參數,由上圖可知:
可選參數未進行指定時,默認為none
說明:可選參數在命令行中,需要先聲明參數,再指定參數值
action可以設定為“store_true”或者“store_false”
parser.add_argument("-p2","-a", action="store_true")
parser.add_argument("-p3", "-b", action="store_true",default=True)
parser.add_argument("-p4", "-c", action="store_true", default=False)
parser.add_argument("-p5", "-d", action="store_false")
parser.add_argument("-p6", "-e", action="store_false", default=True)
parser.add_argument("-p7", "-f", action="store_false", default=False)
args = parser.parse_args()
print(args)
1)執行命令時,如果不進行參數時,
有default的取default的值,沒有的取相反的值(action_true,參數值=false;action_false,參數值=true;)
(直白一點說,沒有參數時default起作用了)
2)執行命令時,傳參數時,
action_true的,全為true
action_false的,全為false
(直白一點說,一旦傳參數了action_true/action_false就起作用了)
3)增加邏輯實測:
在實際使用中,可通過指定參數執行邏輯A,不指定執行邏輯B
parser.add_argument("-p8", "-parameter8", type = str,default="參數8")
“-p8”,是 "-parameter8"極短模式,執行指令,效果是一樣的,具體可查看下圖:
設定choices後,則參數取值只能在設定的容器中去取
parser.add_argument("-p8", "-parameter8", type = str,default="參數8",choices=["參數8","參數88","參數888"])
執行命令如下:
四、說明