python中的命令行参数_python学习笔记6:命令行参数
1. 使用步驟
使用步驟如下:
# 導入模塊
import argparse
# 獲取parser, description文本會顯示在help信息中
parser = argparse.ArgumentParser(description='args discrip')
# 添加選項, 具體選項類型見后面各節
parser.add_argument('-a')
# 解析選項
args = parser.parse_args(sys.argv[1:])
# 使用選項
print(args.a)
對sys.argv[1:]的說明:
sys.argv # 一個列表,存儲命令行參數.
sys.argv[0] # 腳本名.
sys.argv[1:] # 命令行參數.
sys.argv[1][2:] # 截取第一個參數第2bit之后的內容;
2. 位置參數
# 位置參數可以實現類似于vcs a.v b.v的選項處理,
# 如下例, vfiles是位置參數,不需要使用'-vfile 或者-xx'這種形式指定選項內容;
# default=[] 表示默認參數為空list;
# nargs='*' 表示可以是0個或多個參數;
>>> parser.add_argument('vfiles', type=str,default=[], nargs='*')
_StoreAction(optine_strings=[], dest='vfiles', nargs='*', const=None, default=[], Type=, choices=None, help=None, metavar=None)
3. flag類型的選項(選項本身無參數)
flag類型選項本身無參數, 根據"命令行是否有該選項" 和 "該選項聲明值/默認值" 來決定選項實際值(注意, 并不是聲明選項, 則該選項為True, 不聲明為False, 而是內部可配置):
>>> parser.add_argument(
... '-a', # 選項名稱
... action='store_true', # 如果聲明-a, 則a=True;
... default=False # 如果不聲明-a, 則(默認)a=False;
... )
_StoreTrueAction(optine_strings=['-a'], dest='a', nargs=0, const=True, default=False, Type=None, choices=None, help=None, metavar=None)
>>>
>>> parser.add_argument(
... '-b',
... '--b_long_opt', # b有額外的長選項名稱: --b_long_opt
... action='store_false', # 如果聲明-b, 則b=False
... default=True, # 如果不聲明(默認)-b, 則b=True
... dest='b_new_name' # 內部使用b_new_name取用該選項(而不能使用b)
)
_StoreTrueAction(optine_strings=['-b', '--b_long_opt'], dest='b_new_name', nargs=0, const=False, default=True, Type=None, choices=None, help=None, metavar=None)
注意,不會有以下兩種情況,因為這兩種情況下,無論選項是否定義,內部得到的值都一樣,沒有意義;
>>> # action='store_true', default=True,聲明選項和默認值都是True
>>> # action='store_false', default=False,聲明選項和默認值都是False
通過parse一個內部數組來進行驗證,實際使用中是parse真正的命令行數組sys.argv[1:], 注意sys.argv[0]表示的是腳本名稱;
測試1:#-a -b都沒聲明,所以都是default值
>>> lst_args=[]
>>> args = parser.parse_args(lst_args)
>>> args.a # 未聲名-a,所以args.a的值為default值False;
False
>>> args.b_new_name # 未聲名-b,所以args.b_new_name值為默認值True;
True
>>> args.b # 由于使用了dest, 所以args.b會報錯, 只能使用args.b_new_name獲取
AttributeError: 'Namespace' object has no sttribute 'b'
測試2:-a -b都聲明,所以都是action store值
>>> lst_args=['-ab'] # -a和-b是短選項, 可以合并使用'-ab'表示'-a' '-b'
>>> args = parser.parse_args(lst_args)
>>> args.a # 聲名了-a,所以args.a的值為聲明值True;
True
>>> args.b_new_name # 聲名了-b,所以args.b_new_name值為聲明值False;
False
測試3:使用長選項,-a -b都聲明,所以都是store值
>>> lst_args=['-a', '--b_long_opt'] # --b_long_opt是長選項, 需要使用雙短線('--')進行聲明
>>> args = parser.parse_args(lst_args)
>>> args.a # 聲名了-a,所以args.a的值為聲明值True;
True
>>> args.b_new_name # 聲名了-b,所以args.b_new_name值為聲明值False;
False
4. 必選選項(選項必須聲明, 不聲明會報錯)
>>> parser.add_argument(
... '-c', # 選項名稱
... type=int, # 選項類型是整數
... required=True # 選項是必選選項
)
_StoreAction(optine_strings=['-c'], dest='c', nargs=None, const=None, default=None, Type=, choices=None, help=None, metavar=None)
>>>
>>> # 選項-c必須聲明,否則報錯:error:the following argument are required:-c
>>> lst_args=['-c', '3']
>>> args = parser.parse_args(lst_args)
>>>
>>> # 選項-c類型為int,所以str '3'傳到args.c時,會轉類型為int 3;
>>> print(args.c)
3
5. 可選選項,可帶默認值
-d 為str類型的可選選項,默認值為'default_d'
-d 為str類型的可選選項,默認值為'default_d'
>>> parser.add_argument(
... '-d', # 選項名
... type = str, # 選項類型
... required = False, # '-d'是可選選項
... default = 'default_d' # '-d'不聲明時, 默認值為'default_d'
)
_StoreTrueAction(optine_strings=['-d'], dest='d', nargs=None, const=None, default='default_d', Type=, choices=None, help=None, metavar=None)
>>>
>>> lst_args=['-c', '4', '-d', '5'] # -c 必選, -d 可選
>>> args = parser.parse_args(lst_args)
>>> args.c # 選項-c為必選,類型為int
4
>>> type(args.c)
>>>
>>> args.d # 選項-d為可選,類型為str
'5'
>>> type(args.d)
6. 長選項
>>> parser.add_argument(
... '--e_long_opt' , # 表示長選項
... type=str , #
... required=False , #
... default=[] , #
... nargs='+' , # 表示--e_long_opt這個選項后面可以有多個參數
)
_StoreTrueAction(optine_strings=['--e_long_opt'], dest='e_long_opt', nargs='+', const=None, default=[], Type=, choices=None, help=None, metavar=None)
>>>
>>> # --e_long_opt 帶了兩個參數 'opt_e0', 'opt_e1'
>>> lst_args=['-c', '4', '--e_long_opt', 'opt_e0', 'opt_e1']
>>>
>>> args = parser.parse_args(lst_args)
>>>
>>> # --e_long_opt的兩個參數組成一個list賦值給args.e_long_opt;
>>> args.e_long_opt
['opt_e0', 'opt_e1']
7. 列表選項
nargs='+' 表示當前選項可以有多個參數, 這些參數組成一個list, 例子見上一節.
8. 未知選項
如果sys.argv[1:]中出現了"位置選項123" 或 "命名選項–f 456",但"123" 或"-f"選項沒有定義在add_argument()中時,直接使用parser.parse_args()會報告錯誤:
error: unrecognized arguments: 123 –f 456;
這時需要使用parser.parse_known_args()這個方法(而不是parser.parse_args()這個方法)。
>>> lst_args = ['-a', '123', '-f', '456']
>>> parser.add_argument('-a', action='store_true',default=False)
>>>
>>> args, unknown_args = parser.parse_known_args(lst_args)
>>>
>>> args
Namespace(a=True)
>>> args.a # args得到的值與parser.parse_args()的返回值一致
True
>>>
>>> unknown_args # unknown_args得到的是處理完定義過的args后,剩下的選項;
['123', '-f', '456']
總結
以上是生活随笔為你收集整理的python中的命令行参数_python学习笔记6:命令行参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌对印度反垄断处罚不服 称会让Andr
- 下一篇: 修补难度太大 俄罗斯将于2月发射备用飞船