網站首頁 編程語言 正文
一、argparse介紹
官方文檔
argparse 模塊是 Python 內置的一個用于命令項選項與參數解析的模塊,argparse 模塊可以讓人輕松編寫用戶友好的命令行接口。通過在程序中定義好我們需要的參數,然后 argparse 將會從 sys.argv 解析出這些參數。argparse 模塊還會自動生成幫助和使用手冊,并在用戶給程序傳入無效參數時報出錯誤信息。
二、argparse使用——代碼示例
一個簡單的示例。
import argparse parser = argparse.ArgumentParser(description='test') parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.') parser.add_argument('--seed', type=int, default=72, help='Random seed.') parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.') args = parser.parse_args() print(args.sparse) print(args.seed) print(args.epochs)
三個步驟:
1、創建一個解析器——創建 ArgumentParser() 對象
2、添加參數——調用 add_argument() 方法添加參數
3、解析參數——使用 parse_args() 解析添加的參數
1、創建一個解析器——創建 ArgumentParser() 對象
使用 argparse 的第一步是創建一個 ArgumentParser 對象:
parser = argparse.ArgumentParser(description='test')
ArgumentParser 對象包含將命令行解析成 Python 數據類型所需的全部信息。
描述description
大多數對 ArgumentParser 構造方法的調用都會使用 description= 關鍵字參數。這個參數簡要描述這個程度做什么以及怎么做。在幫助消息中,這個描述會顯示在命令行用法字符串和各種參數的幫助消息之間。
2、添加參數——調用 add_argument() 方法添加參數
給一個 ArgumentParser 添加程序參數信息是通過調用 add_argument() 方法完成的。通常,這些調用指定 ArgumentParser 如何獲取命令行字符串并將其轉換為對象。這些信息在 parse_args() 調用時被存儲和使用。例如
parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.') parser.add_argument('--seed', type=int, default=72, help='Random seed.') parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')
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 - 解析后的參數名稱,默認情況下,對于可選參數選取最長的名稱,中劃線轉換為下劃線.
3、解析參數——使用 parse_args() 解析添加的參數
ArgumentParser 通過 parse_args() 方法解析參數。它將檢查命令行,把每個參數轉換為適當的類型然后調用相應的操作。在大多數情況下,這意味著一個簡單的 Namespace 對象將從命令行解析出的屬性構建:
args = parser.parse_args()
在腳本中,通常 parse_args() 會被不帶參數調用,而 ArgumentParser 將自動從 sys.argv 中確定命令行參數。
三、結果測試
import argparse parser = argparse.ArgumentParser(description='test') parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.') parser.add_argument('--seed', type=int, default=72, help='Random seed.') parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.') args = parser.parse_args() print(args.sparse) print(args.seed) print(args.epochs)
顯示幫助文檔:
輸錯命令會告訴你usage用法:
使用命令修改參數:
action='store_true’的使用說明
action·- 命令行遇到參數時的動作,默認值是 store。
直接運行python test.py,輸出結果False
運行python test.py --sparse,輸出結果True
也就是說,action=‘store_true’,只要運行時該變量有傳參就將該變量設為True。
四、python args parse_args() 報錯解決
1、error: the following arguments are required: xxx
報錯:
usage: test.py [-h] xxx
test.py: error: the following arguments are required: xxx
原因:
- args分為可選參數(用
--
指定)和必選參數(不加--
指定)。 - 如果你定義參數xxx時,沒有用
--
指定,那么該參數為需要在命令行內手動指定。此時即使通過default設置默認參數,也還是會報錯。
五、其他問題匯總(評論小伙伴問的)
1、下劃線_和橫線-的區別
Q1:請問博主,第一個位置參數假如說是--max_episode_len
,然后也有人寫是--max-episode-len
,但是他在調用的時候仍然用的是args.max_episode_len,也沒報錯,請問這個下劃線_
和-
的區別在哪里呢?
A1:沒啥區別,在這里表示同一個意思,-
對應_
,代碼里寫的不一樣或者都改成一樣的都可以
2、debug怎么進行?
Q2:這種運行是不是脫離ide,那debug怎么進行啊?
A2:有linux下,命令行單點調試的方法,python -m pdb test.py,搜一搜,網上挺多
總結
原文鏈接:https://blog.csdn.net/qq_34243930/article/details/106517985
相關推薦
- 2022-10-04 C語言實現倒置字符串的兩種方法分享_C 語言
- 2022-07-13 Andorid 自定義 View - 自定義屬性 - 屬性重復導致沖突
- 2022-08-27 python基礎篇之pandas常用基本函數匯總_python
- 2022-06-01 Android利用MediaRecorder實現錄音功能_Android
- 2022-12-07 React?Context?變遷及背后實現原理詳解_React
- 2022-07-20 輕松手寫Spring的IOC
- 2022-07-19 react Context的基本使用( react跨組件傳遞數據 )
- 2022-12-02 python3中join和格式化的用法小結_python
- 最近更新
-
- 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同步修改后的遠程分支