詳解Python中命令行參數(shù)argparse的常用命令
1、參數(shù)個數(shù)控制
parser.add_argument('-i', '--integers', nargs='?', const=100, type=int, help='input a number')
參數(shù)nargs:
- nargs='*' 表示參數(shù)可設(shè)置0個或多個,參數(shù)是一個列表
- nargs='+' 表示參數(shù)可設(shè)置1個或多個,參數(shù)是一個列表
- nargs='?' 表示參數(shù)可設(shè)置0個或1個
1、參數(shù)名后面必須跟值的情況
1)沒有配置nargs
2)設(shè)置了nargs='+'
2、使用參數(shù)但不跟值的條件
使用nargs='?', 且添加const設(shè)定一個參數(shù)值。
3、使用時不顯式掉用參數(shù)但給參數(shù)賦默認(rèn)值
添加default屬性即可。
例如:
import argparse
parser = argparse.ArgumentParser(description='This is a parse demo')
parser.add_argument('-i', '--integers', nargs='?', const=10, default=100, type=int, help='input a number')
args = parser.parse_args()
print(args.integers)
# 顯式調(diào)用
$ python t3.py -i 1
1
# 使用const屬性
$ python t3.py -i
10
# 使用參數(shù)的默認(rèn)值
$ python t3.py
100
4、action--命令行參數(shù)與動作相關(guān)聯(lián)
action 命名參數(shù)指定了這個命令行參數(shù)應(yīng)當(dāng)如何處理。
1.store_[true, false]
不需要跟參數(shù)值,用法: parser.add_argument('--foo', action='store_true'), 如果調(diào)用--foo則其值為true。
2.store_const
如果使用該命令選項則其值為const指定的值,用法:parser.add_argument('--foo', action='store_const', const=42)。
3.store_append
append存儲一個列表,并將每個參數(shù)值附加到列表中。用法:parser.add_argument('--foo', action='append')。
常用的組合如默認(rèn)為False,當(dāng)指定了此命令則屬性為True。
parser.add_argument('--foo', action='store_true', default=False)
2、參數(shù)互斥
如果希望兩個或多個參數(shù)互斥??梢允褂胊rgparse.ArgumentParser.add_mutually_exclusive_group() 功能.
1、參數(shù)組
了解互斥之前先看下參數(shù)組(group),group功能可以把參數(shù)分為不同的組,以更加清晰的方式顯示參數(shù)信息。
import argparse
parser = argparse.ArgumentParser(description='This is a parse demo')
group1 = parser.add_argument_group('group1', 'group1 description')
group1.add_argument('--foo', help='foo help')
group1.add_argument('--foo2', help='foo1 help')
group2 = parser.add_argument_group('group2', 'group2 description')
group2.add_argument('--bar', help='bar help')
group2.add_argument('--bar2', help='bar2 help')
args = parser.parse_args()
print(args)
# 測試
$ python t3.py -h
usage: t3.py [-h] [--foo FOO] [--foo2 FOO2] [--bar BAR] [--bar2 BAR2]
This is a parse demo
optional arguments:
-h, --help show this help message and exit
group1:
group1 description
--foo FOO foo help
--foo2 FOO2 foo1 help
group2:
group2 description
--bar BAR bar help
--bar2 BAR2 bar2 help
2、互斥組
創(chuàng)建一個互斥組。 argparse 將會確?;コ饨M中只有一個參數(shù)在命令行中可用。
import argparse
parser = argparse.ArgumentParser(description='This is a parse demo')
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_false')
args = parser.parse_args()
print(args)
# 測試互斥組
$ python t3.py --foo
Namespace(foo=True, bar=True)
$ python t3.py --bar
Namespace(foo=False, bar=False)
$ python t3.py --foo --bar
usage: t3.py [-h] [--foo | --bar]
t3.py: error: argument --bar: not allowed with argument --foo
3、子命令
在代碼功能較多時,使用子命令可以把相關(guān)的小功能合并為一類命令,然后用二級參數(shù)進(jìn)一步精細(xì)控制。這樣能讓代碼更加模塊化,提高可讀性同時也便利了使用者調(diào)用。例如git的commit就是一個子命令,commit是一個大類命令,而commit本身還有很多二級參數(shù)。
import argparse
def add(arguments):
print(f'{arguments.x} + {arguments.y} = {arguments.x + arguments.y}')
def sub(arguments):
print(f'{arguments.x} - {arguments.y} = {arguments.x - arguments.y}')
# create the top-level parser
parser = argparse.ArgumentParser(description='This is a parse demo')
subparsers = parser.add_subparsers()
# create the parser for command 'add'
add_parser = subparsers.add_parser('add', help='calc add')
add_parser.add_argument('-x', type=int, help='x value')
add_parser.add_argument('-y', type=int, help='y value')
add_parser.set_defaults(func=add)
# create the parser for command 'sub'
sub_parser = subparsers.add_parser('sub', help='calc sub')
sub_parser.add_argument('-x', type=int, help='x value')
sub_parser.add_argument('-y', type=int, help='y value')
sub_parser.set_defaults(func=sub)
args = parser.parse_args()
print(f"print the input: x={args.x}, y={args.y}")
args.func(args) # 跳轉(zhuǎn)到對應(yīng)的函數(shù)
# 測試
$ python t2.py add -x 1 -y=2
print the input: x=1, y=2
1 + 2 = 3
$ python t2.py sub -x 1 -y 2
print the input: x=1, y=2
1 - 2 = -1
需要注意的是:parse_args只返回主解析器和子命令對應(yīng)的子解析器的屬性,沒有其他子命令的解析器,因此上面例子add和sub不可同時調(diào)用。也就是說subparser不支持多個子命令同時使用。
到此這篇關(guān)于詳解Python中命令行參數(shù)argparse的常用命令的文章就介紹到這了,更多相關(guān)Python argparse內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)
這篇文章主要為大家詳細(xì)介紹了Python圖畫調(diào)用工具包實(shí)現(xiàn)發(fā)送郵件服務(wù)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05
pygame實(shí)現(xiàn)簡易飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)簡易飛機(jī)大戰(zhàn),python版飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
python獲取的html中都是\\u003e實(shí)現(xiàn)轉(zhuǎn)成正確字符
這篇文章主要介紹了python獲取的html中都是\\u003e實(shí)現(xiàn)轉(zhuǎn)成正確字符方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Python第三方庫xlrd/xlwt的安裝與讀寫Excel表格
最近開始學(xué)習(xí)python,想做做簡單的自動化測試,需要讀寫excel,于是就接觸到了Python的第三方庫xlrd和xlwt,下面這篇文章就給大家主要介紹了Python中第三方庫xlrd/xlwt的安裝與讀寫Excel表格的方法,需要的朋友可以參考借鑒。2017-01-01
將python文件打包exe獨(dú)立運(yùn)行程序方法詳解
這篇文章主要介紹了將python文件打包exe獨(dú)立運(yùn)行程序方法詳解,需要的朋友可以參考下2020-02-02
使用Python實(shí)現(xiàn)分別輸出每個數(shù)組
今天小編就為大家分享一篇使用Python實(shí)現(xiàn)分別輸出每個數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

