網站首頁 編程語言 正文
1、參數個數控制
parser.add_argument('-i', '--integers', nargs='?', const=100, type=int, help='input a number')
參數nargs:
- nargs='*' ? ? 表示參數可設置0個或多個,參數是一個列表
- nargs='+' ? ?表示參數可設置1個或多個,參數是一個列表
- nargs='?' 表示參數可設置0個或1個
1、參數名后面必須跟值的情況
1)沒有配置nargs
2)設置了nargs='+'
2、使用參數但不跟值的條件
使用nargs='?', 且添加const設定一個參數值。
3、使用時不顯式掉用參數但給參數賦默認值
添加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) # 顯式調用 $ python t3.py -i 1 1 # 使用const屬性 $ python t3.py -i 10 # 使用參數的默認值 $ python t3.py 100
4、action--命令行參數與動作相關聯
action 命名參數指定了這個命令行參數應當如何處理。
1.store_[true, false]
不需要跟參數值,用法: parser.add_argument('--foo', action='store_true'), 如果調用--foo則其值為true。
2.store_const
如果使用該命令選項則其值為const指定的值,用法:parser.add_argument('--foo', action='store_const', const=42)。
3.store_append
append存儲一個列表,并將每個參數值附加到列表中。用法:parser.add_argument('--foo', action='append')。
常用的組合如默認為False,當指定了此命令則屬性為True。
parser.add_argument('--foo', action='store_true', default=False)
2、參數互斥
如果希望兩個或多個參數互斥。可以使用argparse.ArgumentParser.add_mutually_exclusive_group() 功能.
1、參數組
了解互斥之前先看下參數組(group),group功能可以把參數分為不同的組,以更加清晰的方式顯示參數信息。
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、互斥組
創建一個互斥組。 argparse 將會確保互斥組中只有一個參數在命令行中可用。
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、子命令
在代碼功能較多時,使用子命令可以把相關的小功能合并為一類命令,然后用二級參數進一步精細控制。這樣能讓代碼更加模塊化,提高可讀性同時也便利了使用者調用。例如git的commit就是一個子命令,commit是一個大類命令,而commit本身還有很多二級參數。
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) # 跳轉到對應的函數 # 測試 $ 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只返回主解析器和子命令對應的子解析器的屬性,沒有其他子命令的解析器,因此上面例子add和sub不可同時調用。也就是說subparser不支持多個子命令同時使用。
原文鏈接:https://www.cnblogs.com/pingwen/p/17071860.html
相關推薦
- 2022-06-22 詳解Linux下find查找文件命令和grep查找文件命令_linux shell
- 2022-09-24 ASP.NET?MVC實現路由功能_實用技巧
- 2022-07-09 python?監控某個進程內存的情況問題_python
- 2021-12-10 k8s部署ingress-nginx的方法步驟_nginx
- 2022-11-21 關于Fragment?already?added問題的解決方案_Android
- 2023-01-15 Keras中Conv1D的使用及說明_python
- 2022-12-05 python?argparse?模塊命令行參數用法及說明_python
- 2022-05-25 springboot整合jpa報錯詳解
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支